我有一个招聘审核表,其中包含诸如 Applicant_ID,状态, DateTime (带有申请人获得该状态的日期和时间的时间戳)和 Active_Status < / strong>(对/错)。
问题是我没有状态更改的时间戳列。
我要这样做的是:
对于 Active_Status 为False的每一行,我想查找具有相同 Applicant_ID 的行,并返回 DateTime 值,是新行中的下一行(大于actve行的 DateTime 值,但其他行中的最小值)。
我将不得不一次又一次地使用具有相同结构且包含约15万行的表。
数据集示例:
Applicant_ID Active_Status Status DateTime
42830 True Rejected 2018.08.06. 11:33:47
42830 False Status1 2018.07.14. 6:46:04
42831 False Status1 2018.07.14. 8:25:22
42831 True Rejected 2018.08.06. 15:08:58
42832 False Status1 2018.07.14. 9:03:37
42832 False No 2018.07.16. 8:25:12
42832 True Rejected 2018.08.31. 13:44:30
我想创建什么:
Applicant_ID Active_Status Status DateTime Changed
42830 True Rejected 2018.08.06. 11:33:47 Active
42830 False Status1 2018.07.14. 6:46:04 2018.08.06. 11:33:47
42831 False Status1 2018.07.14. 8:25:22 2018.08.06. 15:08:58
42831 True Rejected 2018.08.06. 15:08:58 Active
42832 False Status1 2018.07.14. 9:03:37 2018.07.16. 8:25:12
42832 False No 2018.07.16. 8:25:12 2018.08.31. 13:44:30
42832 True Rejected 2018.08.31. 13:44:30 Active
答案 0 :(得分:0)
看看[Pandas shift功能] [1]
首先,您应该使用看日期的字符串对列进行标准化。
from dateutil.parser import parse
df['DateTime'] = df['DateTime'].apply(parse)
对值进行排序并为每个组应用移位功能
df = df.sort_values(by=['Applicant_ID', 'DateTime'])
df['Changed'] = df.groupby('Applicant_ID').DateTime.shift(-1)
结果:
Applicant_ID Active_Status Status DateTime Changed
1 42830 False Status1 2018-07-14 06:46:04 2018-08-06 11:33:47
0 42830 True Rejected 2018-08-06 11:33:47 NaT
2 42831 False Status1 2018-07-14 08:25:22 2018-08-06 15:08:58
3 42831 True Rejected 2018-08-06 15:08:58 NaT
4 42832 False Status1 2018-07-14 09:03:37 2018-07-16 08:25:12
5 42832 False No 2018-07-16 08:25:12 2018-08-31 13:44:30
6 42832 True Rejected 2018-08-31 13:44:30 NaT