熊猫数据框检查ID在时间间隔中是否出现超过1个

时间:2018-08-29 16:39:31

标签: python pandas dataframe

下午好,可以说我有这个数据框。

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

预先感谢

1 个答案:

答案 0 :(得分:2)

可以在groupbyid使用event_date并在不到10天的时间内获得sum的差异,然后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

    Redeem code1: 0LB0WYAFZI  - Remain Minutes: 120 minutes - email id - mohamedcse@gmail.com 
    Redeem code2: LA7I5KSER4 - Remain Minutes: 60 minutes  - email id - mohamedcse@gmail.com