我的熊猫数据框如下
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'
如何解决这个问题
答案 0 :(得分:3)
问题是pandas
需要datetime
或timedelta
来使用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
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
,然后进行减法