【发布时间】:2019-03-06 06:45:06
【问题描述】:
在每个人都投反对票之前,这是一个很难用一个标题来表达的问题。对于给定的时间戳,我想在距离超过 10 分钟(即 11-15 分钟)时将其舍入到前 15 分钟。如果距离不到 10 分钟,我想将其四舍五入到前 15 分钟。
这可能更容易显示:
1st timestamp = 08:12:00. More than 10 mins so round to nearest 15 min = 08:00:00
2nd timestamp = 08:07:00. Less than 10 mins so round to the previous, previous 15 min = 7:45:00
我可以轻松地对大于 10 分钟的值进行舍入。不到 10 分钟的时间是我苦苦挣扎的地方。我试图将时间戳转换为总秒数,以确定它是否小于 600 秒(10 分钟)。如果少于 600 秒,我会再休息 15 分钟。如果超过 600 秒,我会原样离开。以下是我的尝试。
import pandas as pd
from datetime import datetime, timedelta
d = ({
'Time' : ['8:10:00'],
})
df = pd.DataFrame(data=d)
df['Time'] = pd.to_datetime(df['Time'])
def hour_rounder(t):
return t.replace(second=0, microsecond=0, minute=(t.minute // 15 * 15), hour=t.hour)
FirstTime = df['Time'].iloc[0]
StartTime = hour_rounder(FirstTime)
#Strip date
FirstTime = datetime.time(FirstTime)
StartTime = datetime.time(StartTime)
#Convert timestamps to total seconds
def get_sec(time_str):
h, m, s = time_str.split(':')
return int(h) * 3600 + int(m) * 60 + int(s)
FirstTime = str(FirstTime)
FirstTime_secs = get_sec(FirstTime)
StartTime = str(StartTime)
StartTime_secs = get_sec(StartTime)
#Determine difference
diff = FirstTime_secs - StartTime_secs
【问题讨论】:
-
您的两种情况可以合二为一:减去 10 分钟并四舍五入到前一刻钟。
标签: python pandas time rounding