下午好,假设我有这个数据框。
id event_date event_type
1 8/5/2018 1
2 8/5/2018 1
3 8/7/2018 1
1 8/10/2018 1
3 8/14/2018 1
2 8/16/2018 1
1 8/19/2018 1
3 8/28/2018 1
我想检查某个 ID 在 10 天的时间范围内是否出现多次。
我可以获取 id 出现的次数
counts = df['id'].value_counts()
df[df['id'].isin(counts.index[counts > 1])]
但我坚持仅在进入时间范围时的部分。
在这种情况下,我只需要得到
id times
1 2
3 1
提前致谢
最佳答案
在 id
上使用 groupby
并获取 event_date
小于 10 天的差异,然后对实例进行求和
.
In [442]: (df.groupby('id')['event_date'].diff().dt.days.lt(10)
.groupby(df['id']).sum()
.reset_index(name='times'))
Out[442]:
id times
0 1 2.0
1 2 0.0
2 3 1.0
详情
In [445]: df.groupby('id')['event_date'].diff()
Out[445]:
0 NaT
1 NaT
2 NaT
3 5 days
4 7 days
5 11 days
6 9 days
7 14 days
Name: event_date, dtype: timedelta64[ns]
In [446]: df.groupby('id')['event_date'].diff().dt.days
Out[446]:
0 NaN
1 NaN
2 NaN
3 5.0
4 7.0
5 11.0
6 9.0
7 14.0
Name: event_date, dtype: float64
In [447]: df.groupby('id')['event_date'].diff().dt.days.lt(10)
Out[447]:
0 False
1 False
2 False
3 True
4 True
5 False
6 True
7 False
Name: event_date, dtype: bool
In [448]: df.groupby('id')['event_date'].diff().dt.days.lt(10).groupby(df.id).sum()
Out[448]:
id
1 2.0
2 0.0
3 1.0
Name: event_date, dtype: float64
关于python - Pandas Dataframe检查id在时间间隔内是否出现大于1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52082342/