如何以分钟为单位获取时差

时间:2018-10-01 05:19:23

标签: python pandas time

我在熊猫中有以下数据框

  code     start_time      end_time
  0        13:00:09        13:30:09
  1        14:23:33        15:23:23
  2        11:30:00        12:30:00

start_timeend_time属于对象类型。

我想在几分钟之内得到这两列的差额。我正在熊猫里追踪

df['time_diff'] = pd.Timestamp(df['start_time']) - pd.Timestamp(df['end_time'])   

1 个答案:

答案 0 :(得分:2)

将列to_datetime转换为日期时间或将to_timedelta转换为时间增量,将sub减为列,将输出时间增量转换为total_seconds并除以60

start_time = pd.to_datetime(df['start_time'].astype(str)) 
end_time = pd.to_datetime(df['end_time'].astype(str))

#another solution
#start_time = pd.to_timedelta(df['start_time'].astype(str)) 
#end_time = pd.to_timedelta(df['end_time'].astype(str))

df['time_diff'] = start_time.sub(end_time).dt.total_seconds().div(60)
print (df)
   code start_time  end_time  time_diff
0     0   13:00:09  13:30:09 -30.000000
1     1   14:23:33  15:23:23 -59.833333
2     2   11:30:00  12:30:00 -60.000000

如果将结束时间与开始时间交换:

df['time_diff'] = end_time.sub(start_time).dt.total_seconds().div(60)
print (df)
   code start_time  end_time  time_diff
0     0   13:00:09  13:30:09  30.000000
1     1   14:23:33  15:23:23  59.833333
2     2   11:30:00  12:30:00  60.000000

示例

import datetime

df = pd.DataFrame({'code': [0, 1, 2], 
                  'start_time': [datetime.time(13, 0, 9), datetime.time(14, 23, 33), 
                                 datetime.time(11, 30)], 
                   'end_time': [datetime.time(13, 30, 9), datetime.time(15, 23, 23),
                                datetime.time(12, 30)]})

print (df)
   code start_time  end_time
0     0   13:00:09  13:30:09
1     1   14:23:33  15:23:23
2     2   11:30:00  12:30:00

IDE已发表评论,感谢@Anton vBR:

start_time = pd.to_timedelta(df['start_time'].astype(str)).dt.total_seconds()
end_time = pd.to_timedelta(df['end_time'].astype(str)).dt.total_seconds()

df['time_diff'] = end_time.sub(start_time).div(60)
print (df)
   code start_time  end_time  time_diff
0     0   13:00:09  13:30:09  30.000000
1     1   14:23:33  15:23:23  59.833333
2     2   11:30:00  12:30:00  60.000000