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

我有以下内容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,True如果date每个簇 ( df.groupby('cluster_id')) 中的连续值之间的所有差异都为30 < x < 40;和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在这种情况下它也可以使用。


慕的地8271018
浏览 157回答 1
1回答

慕丝7291255

transform与Series.between参数一起使用inclusive=False:df['recur_pmt'] = df.groupby('cluster_id')['date'].transform(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lambda x: (x.diff().dropna().dt.days.between(20, 40, inclusive=False)).all())print (df)&nbsp; &nbsp;cluster_id&nbsp; &nbsp; &nbsp; &nbsp;date&nbsp; recur_pmt0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 2018-01-02&nbsp; &nbsp; &nbsp; False1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 2018-02-01&nbsp; &nbsp; &nbsp; False2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 2018-03-30&nbsp; &nbsp; &nbsp; False3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 2018-04-01&nbsp; &nbsp; &nbsp; &nbsp;True4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 2018-04-23&nbsp; &nbsp; &nbsp; &nbsp;True5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 2018-05-18&nbsp; &nbsp; &nbsp; &nbsp;True6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 2018-06-01&nbsp; &nbsp; &nbsp; False7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 2018-07-30&nbsp; &nbsp; &nbsp; False8&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 2018-09-30&nbsp; &nbsp; &nbsp; False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python