python - Pandas Dataframe检查id在时间间隔内是否出现大于1

标签 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

提前致谢

最佳答案

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/

相关文章:

python - 如何在没有 key 的情况下执行 SQL 外连接的 pandas 等价

r - 选择具有特定条件的子数据集,而不使用应用和子集函数

python - 如何根据记录中其他 4 个字段的 bool 运算符有效更新数据框中的字段?

python - 在 python 中查找行和列中的最小对值?

python - pandas:在 DataFrame 中记录单元格时有效避免 0

python - 如何为 Pandas 转换 xls 文件?

python - 使用 pandas.DataFrame.melt() 与 seaborn 一起绘制数据

python - 使用客户端加密的 AWS S3

python - 媒体内容工作

python - 模拟相关的多变量数据