如何在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:00
和s2 = 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中的数据框中的每一行的两个子字符串之间选择字符串
PYSPARK:如何在 pyspark 数据框中找到两列的余弦相似度?