我有一张如下所示的表格:
用户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')
但我想知道是否有更简单的方法。
代码
如果同一用户的时间戳像示例数据帧一样按时间顺序排序,则可以使用以下代码:
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)