[英]Rounding datetime based on time of day
我有一个带有时间戳的熊猫数据框,如下所示:
6/30/2019 3:45:00 PM
我想根据时间四舍五入日期。 早上 6 点之前的任何事情都将被计算为前一天。
6/30/2019 5:45:00 AM -> 6/29/2019
6/30/2019 6:30:00 AM -> 6/30/2019
我考虑做的是将日期和时间分成 2 个不同的列,然后使用 if 语句来移动日期(如果时间 >= 06:00 等)。 只是想知道 Pandas 中有一个内置函数可以做到这一点。 我见过有人根据最近的小时上下舍入的帖子,但从未见过特定的时间阈值(早上 6 点)。
感谢您的帮助!
可能有更好的方法来做到这一点..但这是一种方法。
import pandas as pd
def checkDates(d):
if d.time().hour < 6:
return d - pd.Timedelta(days=1)
else:
return d
ls = ["12/31/2019 3:45:00 AM", "6/30/2019 9:45:00 PM", "6/30/2019 10:45:00 PM", "1/1/2019 4:45:00 AM"]
df = pd.DataFrame(ls, columns=["dates"])
df["dates"] = df["dates"].apply(lambda d: checkDates(pd.to_datetime(d)))
print (df)
dates
0 2019-12-30 03:45:00
1 2019-06-30 21:45:00
2 2019-06-30 22:45:00
3 2018-12-31 04:45:00
另请注意,我没有考虑时间。 当返回结果时..如果你只想要它末尾的日期,你可以从 datetime 对象中得到它,做这样的事情
打印 ((pd.to_datetime("12/31/2019 3:45:00 AM")).date()) >>> 2019-12-31
如果很好地理解python并且不希望其他人(将来)了解您在做什么,上面的一个班轮是什么。
df["dates"] = df["dates"].apply(lambda d: pd.to_datetime(d) - pd.Timedelta(days=1) if pd.to_datetime(d).time().hour < 6 else pd.to_datetime(d))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.