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

Posted

技术标签:

【中文标题】如何在python数据框中找到两个时间差之间的持续时间【英文标题】:How to find duration between two time difference in python dataframe 【发布时间】:2018-11-18 03:07:10 【问题描述】:

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

开始时间结束时间 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

需要这样的输出:

期间 540 分钟 798 薄荷 162薄荷 1140 分钟 420 分钟

【问题讨论】:

Date difference in minutes in Python的可能重复 你是如何计算时差的? 08:30:00 - 17:30:00 = -9 小时,而不是 120 分钟。 我只写了输出。 如果你要展示一个例子,我建议它代表实际的正确输出。 您的输入不清楚。当您说数据框时,您是指熊猫吗?如果是这样,则应相应地标记问题。 【参考方案1】:

您的预期输出似乎不正确。除此之外,我们可以使用 base 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)

【讨论】:

这是一个 Python 问题。不确定,为什么您建议在 R 中使用解决方案。 @Mr.T 它最初被标记为 R 问题。检查编辑。【参考方案2】:
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

【讨论】:

【参考方案3】:

是的,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 指出这个用例。

【讨论】:

见more

以上是关于如何在python数据框中找到两个时间差之间的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

在Python中的数据框中的每一行的两个子字符串之间选择字符串

Python:如何在没有循环的数据框中查找值?

数据框中两个数字之间的除法

PYSPARK:如何在 pyspark 数据框中找到两列的余弦相似度?

如何在Python中找到两个矩阵之间的差异,结果不应该有任何带减号的值

如何从 Python 3.5 中的数据框中找到最大值的确切位置-修改