我有一个熊猫数据框如下
Dev_id Time
88345 13:40:31
87556 13:20:33
88955 13:05:00
..... ........
85678 12:15:28
Run Code Online (Sandbox Code Playgroud)
上面的数据帧有 83000 行。我想取连续两行之间的时间差并将其保存在单独的列中。想要的结果是
Dev_id Time Time_diff(in min)
88345 13:40:31 20
87556 13:20:33 15
88955 13:05:00 15
Run Code Online (Sandbox Code Playgroud)
我试过了,df['Time_diff'] = df['Time'].diff(-1)但出现如下所示的错误
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题
jez*_*ael 11
问题是函数pandas需要datetimes 或timedeltas diff,所以首先转换 by 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8907 次 |
| 最近记录: |