[英]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
这是预期的行为,尽管您第一次遇到它时不直观,并且与 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.