Python Pandas-遍历dataframe并计算列值和上一列之间的差异。
我有一个名为“df”的数据框架,它由日期、ID和活动组成,按“日期”和“ID”排序,以便将ID分组,然后按时间顺序从早到晚排列 我想从前一个“日期”中减去当前的“日期”列,以便找到两次之间的持续时间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
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)