如何在python数据帧中找到两个时间差之间的持续时间

时间:2018-06-08 05:49:14

标签: python

我有这样的原始数据想找到这两次在薄荷中的区别.....问题是数据框中的数据... 来源:

   start time   end time
0   08:30:00    17:30:00
1   11:00:00    17:30:00
2   08:00:00    21:30:00
3   19:30:00    22:00:00
4   19:00:00    00:00:00
5   08:30:00    15:30:00

需要这样的输出:

duration
 540mint
 798mint
 162mint
 1140mint
 420mint

3 个答案:

答案 0 :(得分:0)

您的预期输出似乎不正确。除此之外,我们可以使用基数R difftime

transform(
    df,
    duration = difftime(
        strptime(end.time, format = "%H:%M:%S"),
        strptime(start.time, format = "%H:%M:%S"),
        units = "mins"))
#  start.time end.time   duration
#0   08:30:00 17:30:00   540 mins
#1   11:00:00 17:30:00   390 mins
#2   08:00:00 21:30:00   810 mins
#3   19:30:00 22:00:00   150 mins
#4   19:00:00 00:00:00 -1140 mins
#5   08:30:00 15:30:00   420 mins

或作为difftime向量

with(df, difftime(
    strptime(end.time, format = "%H:%M:%S"),
    strptime(start.time, format = "%H:%M:%S"),
    units = "mins"))
#Time differences in mins
#[1]   540   390   810   150 -1140   420

样本数据

df <- read.table(text =
    "   'start time'   'end time'
0   08:30:00    17:30:00
1   11:00:00    17:30:00
2   08:00:00    21:30:00
3   19:30:00    22:00:00
4   19:00:00    00:00:00
5   08:30:00    15:30:00", header = T, row.names = 1)

答案 1 :(得分:0)

import pandas as pd

df = pd.DataFrame({'start time':['08:30:00','11:00:00','08:00:00','19:30:00','19:00:00','08:30:00'],'end time':['17:30:00','17:30:00','21:30:00','22:00:00','00:00:00','15:30:00']},columns=['start time','end time'])

df
Out[355]:
  start time  end time
0   08:30:00  17:30:00
1   11:00:00  17:30:00
2   08:00:00  21:30:00
3   19:30:00  22:00:00
4   19:00:00  00:00:00
5   08:30:00  15:30:00

(pd.to_datetime(df['end time']) - pd.to_datetime(df['start time'])).dt.seconds/60
Out[356]:
0    540.0
1    390.0
2    810.0
3    150.0
4    300.0
5    420.0
dtype: float64

答案 2 :(得分:-1)

是的,绝对datetime就是你需要的。具体来说,是strptime函数,它将字符串解析为时间对象。

from datetime import datetime
s1 = '10:33:26'
s2 = '11:15:49' # for example
FMT = '%H:%M:%S'
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT)

这会得到一个timedelta对象,其中包含两次之间的差异。你可以做任何你想做的事,例如将其转换为秒或将其添加到另一个datetime

如果结束时间早于开始时间,则会返回否定结果,例如s1 = 12:00:00s2 = 05:00:00。如果您希望代码假设在这种情况下间隔跨越午夜(即它应该假设结束时间从不早于开始时间),您可以将以下行添加到上面的代码中:

if tdelta.days < 0:
    tdelta = timedelta(days=0,
                seconds=tdelta.seconds, microseconds=tdelta.microseconds)

(当然你需要在某处包含from datetime import timedelta)。感谢J.F. Sebastian指出这个用例。