Pandas - 迭代数据框并计算列值与上一列之间的差异。

时间:2018-04-13 16:05:43

标签: python pandas datetime

我有一个名为" 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调用,那么脚本就会出错,因为它接收了一个日期时间和字符串。

有更优雅的方法吗?此外,如果我将值放在持续时间列中,我可以在月/日/年之后离开奖励积分。

非常感谢你!我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

groupbydiff

一起使用
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