计算熊猫连续两行之间的时差

时间:2019-01-03 10:16:36

标签: python pandas

我的熊猫数据框如下

Dev_id     Time
88345      13:40:31
87556      13:20:33
88955      13:05:00
.....      ........
85678      12:15:28

以上数据框有83000行。我想将两个连续行之间的时间差保存在单独的列中。理想的结果是

Dev_id    Time          Time_diff(in min)
88345      13:40:31      20
87556      13:20:33      15
88955      13:05:00      15

我尝试过df['Time_diff'] = df['Time'].diff(-1),但出现如下所示的错误

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

如何解决这个问题

2 个答案:

答案 0 :(得分:3)

问题是pandas需要datetimetimedelta来使用diff函数,因此首先通过to_timedelta进行转换,然后得到total_seconds并除以60

df['Time_diff'] = pd.to_timedelta(df['Time'].astype(str)).diff(-1).dt.total_seconds().div(60)
#alternative
#df['Time_diff'] = pd.to_datetime(df['Time'].astype(str)).diff(-1).dt.total_seconds().div(60)
print (df)
   Dev_id      Time  Time_diff
0   88345  13:40:31  19.966667
1   87556  13:20:33  15.550000
2   88955  13:05:00  49.533333
3   85678  12:15:28        NaN

如果每分钟需要floorround

df['Time_diff'] = (pd.to_timedelta(df['Time'].astype(str))
                     .diff(-1)
                     .dt.floor('T')
                     .dt.total_seconds()
                     .div(60))
print (df)
   Dev_id      Time  Time_diff
0   88345  13:40:31       19.0
1   87556  13:20:33       15.0
2   88955  13:05:00       49.0
3   85678  12:15:28        NaN

答案 1 :(得分:0)

您应该先将df ['Time']列转换/转换为pd.Timedelta,然后进行减法