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