我有这样的原始数据想找到这两次在薄荷中的区别.....问题是数据框中的数据... 来源:
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
答案 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: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指出这个用例。