在组内对比两行的时间戳
我需要根据应用程序ID进行分组。然后,在每组中比较两条时间戳,并创建一个布尔值系列“user_rejects”。这个“user_rejects”应该表示在该组的其他行中,拒绝时间是否等于选定时间。
这个数据集有数百万行,超过100个变量,每个应用程序ID都有15到25行,所以效率很重要。
示例数据
应用程序ID | ID | 创建时间戳 | 选定时间 | 拒绝时间 |
---|---|---|---|---|
69c0 | 7 | 2023-11-20 05:32:26.691008 | 2023-11-20 05:32:26.691008 | 2023-11-21 08:30:20.881008 |
69c0 | 15 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-20 05:32:26.691008 |
69c0 | 14 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-04 05:32:26.691008 |
69c0 | 9 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-20 05:32:26.691010 |
69c0 | 18 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-20 05:32:26.691011 |
69c0 | 6 | 2023-11-20 05:32:26.691008 | 2023-11-21 08:30:20.881008 | NaT |
69c0 | 19 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-11 05:32:26.691008 |
db26 | 11 | 2023-08-01 10:40:48.473828 | 2023-08-01 10:40:48.473828 | |
db26 | 12 | 2023-08-01 10:40:48.473828 | 2023-08-01 10:40:48.473828 |
期望的输出
应用程序ID | ID | 创建时间戳 | 选定时间 | 拒绝时间 | 用户拒绝 |
---|---|---|---|---|---|
69c0 | 7 | 2023-11-20 05:32:26.691008 | 2023-11-20 05:32:26.691008 | 2023-11-21 08:30:20.881008 | 1 |
69c0 | 15 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-20 05:32:26.691008 | 0 |
69c0 | 14 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-04 05:32:26.691008 | 0 |
69c0 | 9 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-20 05:32:26.691010 | 0 |
69c0 | 18 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-20 05:32:26.691011 | 0 |
69c0 | 6 | 2023-11-20 05:32:26.691008 | 2023-11-21 08:30:20.881008 | NaT | 0 |
69c0 | 19 | 2023-11-20 05:32:26.691008 | NaT | 2023-12-11 05:32:26.691008 | 0 |
db26 | 11 | 2023-08-01 10:40:48.473828 | 2023-08-01 10:40:48.473828 | 0 | |
db26 | 12 | 2023-08-01 10:40:48.473828 | 2023-08-01 10:40:48.473828 | 0 |
1 个回答
4
在第一步中,将列转换为日期时间格式,然后在每个组中使用Series.isin
的lambda函数进行比较:
cols = ['selected_time','rejected_time']
df[cols] = df[cols].apply(pd.to_datetime, errors='coerce')
f = lambda x: x['rejected_time'].isin(x['selected_time'].dropna())
df['user_rejects'] = df.groupby('application_id', group_keys=False).apply(f).astype(int)