我有一个名为“ df”的数据框,该数据框由日期,ID和活动组成,该数据帧同时在“日期”和“ 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对象,因此duration可以相应地处理timedelta。如果我在第3行中删除了strptime调用,那么脚本会出错,因为该脚本正在接收日期时间和字符串。

有没有更优雅的方法可以做到这一点?另外,如果我在“持续时间”列中输入值时可以省去月/日/年,则可以得到奖励积分。

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

最佳答案

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

07-24 09:51
查看更多