Python Pandas-遍历dataframe并计算列值和上一列之间的差异。

Python Pandas-遍历dataframe并计算列值和上一列之间的差异。,python,pandas,datetime,Python,Pandas,Datetime,我有一个名为“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

我有一个名为“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行的strtime调用,那么脚本就会出错,因为它接收到一个datetime和字符串

有没有更优雅的方法?此外,如果我在“持续时间”列中输入值时可以省去月/日/年,则可获得额外积分


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

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

当我删除上面的行并用您的建议替换它们时,我收到一个“ValueError”,我相信这是因为“Date”列是字符串,pandas不能减去2个字符串。是我弄错了还是我没有正确地执行您的建议?然后用
df.Date=pd.to\u datetime(df.Date)