如何过滤在 pandas 中的两个其他事件之间发生事件的用户?

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

我有一张如下所示的表格:

用户ID 活动 时间戳
1 发射 2023-09-15 14:31:44
1 购买 2023-09-15 14:31:49
1 取消 2023-09-15 14:31:50
1 添加 2023-09-15 14:31:52
2 添加 2023-09-16 14:31:40
2 取消 2023-09-16 14:31:44
2 发射 2023-09-16 14:31:49
2 购买 2023-09-16 14:31:50
2 购买 2023-09-16 14:31:52
3 购买 2023-09-17 14:31:44
3 取消 2023-09-17 14:31:49
3 删除 2023-09-17 14:31:50
3 添加 2023-09-17 14:31:52

如何过滤在“购买”事件之后和“添加”事件之前发生过“取消”事件的用户(不考虑它们之间是否存在任何其他事件)?

换句话说,我需要获取以下用户列表:

1, 3

提前谢谢您

我尝试添加列“buy_timestamp”和“add_timestamp”并过滤 df df[df.event == '取消'].query('时间戳 > 'buy_timestamp' & 时间戳 < 'add_timestamp')

但我想知道是否有更简单的方法。

python pandas dataframe group-by
1个回答
0
投票

代码

如果同一用户的时间戳像示例数据帧一样按时间顺序排序,则可以使用以下代码:

cond = df['event'].eq('buy').groupby(df['user_id']).cummax()
out = df.loc[df['event'].where(cond).eq('add'), 'user_id'].unique()

array([1, 3], dtype=int64)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.