簡體   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