【问题标题】:calculate the time difference between two consecutive rows in pandas计算pandas中连续两行之间的时间差
【发布时间】:2019-05-29 22:07:53
【问题描述】:

我有一个如下的熊猫数据框

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'

如何解决这个问题

【问题讨论】:

标签: python pandas


【解决方案1】:

问题是pandas需要datetimes或timedeltas来实现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

【讨论】:

  • 不能是df['Time_diff'] = (pd.to_timedelta(df['Time'])).diff(-1).dt.floor('T').dt.total_seconds().div(60),我相信我们不需要astype(str) , or First convert df['Time'] = pd.to_timedelta(df['Time'])` 然后是df['Time_Diff'] = df['Time'].diff(-1).dt.total_seconds().div(60)只是一个想法。
  • @pygo - 问题在于错误TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time' - 这意味着有时间,没有字符串,所以有必要进行交流。用于测试df['Time'] = pd.to_datetime(df['Time']).dt.time
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多