繁体   English   中英

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

[英]pandas how to check differences between column values are within a range or not in each group

我有以下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 否则为False 所以结果就像,

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

使用transformSeries.between和参数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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM