繁体   English   中英

基于一天中的时间舍入日期时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM