繁体   English   中英

Pandas 四舍五入到最接近的小时不一致

[英]Pandas round to nearest hour inconsistently

如果我要求 pandas 将日期时间四舍五入到最近的小时,则从中间点到最近的小时的四舍五入不一致。 奇数小时(如 5)将其半小时(5:30)向上取整,但偶数小时将其半小时向下取整。 例如 5:30 和 6:30 均四舍五入为 6。

为什么? 我如何让它做一些一致的事情,比如每半小时向上一次?

>df['nearest_hour']=df['datetime'].dt.round('H')
>df
    datetime    nearest_hour
141470  2019-10-26 04:45:00+00:00   2019-10-26 05:00:00+00:00
294282  2019-10-26 05:00:00+00:00   2019-10-26 05:00:00+00:00
178460  2019-10-26 05:15:00+00:00   2019-10-26 05:00:00+00:00
92696   2019-10-26 05:30:00+00:00   2019-10-26 06:00:00+00:00
227946  2019-10-26 05:45:00+00:00   2019-10-26 06:00:00+00:00
216924  2019-10-26 06:00:00+00:00   2019-10-26 06:00:00+00:00
167823  2019-10-26 06:15:00+00:00   2019-10-26 06:00:00+00:00
240039  2019-10-26 06:30:00+00:00   2019-10-26 06:00:00+00:00

在 pandas github 上引用此问题

这是预期的行为,尽管您第一次遇到它时不直观,并且与 Python 生态系统的 rest 一致。 四舍五入的规则是精确的中间情况四舍五入到最接近的偶数结果。

另请参阅Python 3.x 舍入行为

for i in [1.5, 2.5, 3.5, 4.5]:
    print(i, round(i))
    
1.5 2
2.5 2
3.5 4
4.5 4

尽管如此,如果您想实现您预期的舍入行为,您可以ceil floor从小时到下限:

df['nearest_hour'] = df["datetime"].dt.ceil("H").where(df["datetime"].dt.minute >= 30, df["datetime"].dt.floor("H"))

df
                   datetime              nearest_hour
0 2019-10-26 04:45:00+00:00 2019-10-26 05:00:00+00:00
1 2019-10-26 05:00:00+00:00 2019-10-26 05:00:00+00:00
2 2019-10-26 05:15:00+00:00 2019-10-26 05:00:00+00:00
3 2019-10-26 05:30:00+00:00 2019-10-26 06:00:00+00:00
4 2019-10-26 05:45:00+00:00 2019-10-26 06:00:00+00:00
5 2019-10-26 06:00:00+00:00 2019-10-26 06:00:00+00:00
6 2019-10-26 06:15:00+00:00 2019-10-26 06:00:00+00:00
7 2019-10-26 06:30:00+00:00 2019-10-26 07:00:00+00:00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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