熊猫如何检查每组中列值之间是否在范围内的差异

2024-04-24 02:49:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下df

cluster_id    date
1             2018-01-02
1             2018-02-01
1             2018-03-30
2             2018-04-01
2             2018-04-23
2             2018-05-18
3             2018-06-01
3             2018-07-30
3             2018-09-30

我喜欢创建一个布尔列recur_pmt,如果每个簇(df.groupby('cluster_id'))中date的连续值之间的所有差异都是30 < x < 40,则将其设置为True;否则{}。结果是

cluster_id    date          recur_pmt
1             2018-01-02    False
1             2018-02-01    False
1             2018-03-30    False
2             2018-04-01    True
2             2018-04-23    True
2             2018-05-18    True
3             2018-06-01    False
3             2018-07-30    False
3             2018-09-30    False

我试过了

df['recur_pmt'] = df.groupby('cluster_id')['date'].apply(
            lambda x: (20 < x.diff().dropna().dt.days < 40).all())

但它没有起作用。我还想知道在这种情况下它是否也可以使用transform


Tags: lambdaidfalsetruedfdatedtdiff
1条回答
网友
1楼 · 发布于 2024-04-24 02:49:51

transform^{}和参数inclusive=False一起使用:

df['recur_pmt'] = df.groupby('cluster_id')['date'].transform(
            lambda x: (x.diff().dropna().dt.days.between(20, 40, inclusive=False)).all())
print (df)
   cluster_id       date  recur_pmt
0           1 2018-01-02      False
1           1 2018-02-01      False
2           1 2018-03-30      False
3           2 2018-04-01       True
4           2 2018-04-23       True
5           2 2018-05-18       True
6           3 2018-06-01      False
7           3 2018-07-30      False
8           3 2018-09-30      False

相关问题 更多 >