Pandas Dataframe检查id是否在时间间隔内出现超过1

问题描述 投票:2回答:1

下午好,让我说我有这个数据帧。

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

提前致谢

python pandas dataframe
1个回答
2
投票

使用groupby id并获得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
© www.soinside.com 2019 - 2024. All rights reserved.