我有一个名为" df"的数据帧。由日期,ID和活动组成,在" date"和" id"为了将ID组合在一起,然后按时间顺序排列最早到最新。
我想减去当前的"日期"前一列"日期"为了找到两次之间的持续时间。
Date ID Activity Duration
4/12/2018 7:58 1111 1
4/12/2018 8:40 1111 0
4/12/2018 8:42 1111 1
4/12/2018 9:26 1111 0
到目前为止我的脚本:
for row in df.itertuples():
callDate = datetime.strptime(row.Date, "%m/%d/%y %I:%M %p")
previousRecord = df['Date'].shift(-1).strptime(row.Date, "%m/%d/%y %I:%M %p")
duration = callDate - previousRecord
第3行错误,因为我无法访问前一行并将其转换为datetime对象,因此持续时间可以相应地处理timedelta。如果我删除了第3行的strptime调用,那么脚本就会出错,因为它接收了一个日期时间和字符串。
有更优雅的方法吗?此外,如果我将值放在持续时间列中,我可以在月/日/年之后离开奖励积分。
非常感谢你!我非常感谢你的帮助。
答案 0 :(得分:3)
将groupby
与diff
df.assign(Duration=df.groupby('ID').Date.diff().fillna(0))
Date ID Activity Duration
0 2018-04-12 07:58:00 1111 1 00:00:00
1 2018-04-12 08:40:00 1111 0 00:42:00
2 2018-04-12 08:42:00 1111 1 00:02:00
3 2018-04-12 09:26:00 1111 0 00:44:00