我有一個看起來像這樣的 Pandas 資料框:
# date
--- -------------------
0 2022-01-01 08:00:00
1 2022-01-01 08:01:00
2 2022-01-01 08:52:00
我的目標是添加一個新列,其中包含一個具有下一小時值的日期時間物件。我查看了ceil 函式的檔案,它在大多數情況下運行良好。
問題
問題涉及完美的時間(如#0 的時間):
df["next"] = (df["date"]).dt.ceil("H")
# date next
--- ------------------- -------------------
0 2022-01-01 08:00:00 2022-01-01 08:00:00 <--- wrong, expected 09:00:00
1 2022-01-01 08:01:00 2022-01-01 09:00:00 <--- correct
2 2022-01-01 08:52:00 2022-01-01 09:00:00 <--- correct
次優解決方案
我想出了以下解決方法,但我發現它真的很笨拙:
def nextHour(current):
return pd.date_range(start=current, periods=2, freq="H")[1]
df["next"] = (df["date"]).apply(lambda x: nextHour(x))
我的資料集中有大約 1-2 百萬行,我發現這個解決方案與原生的dt.ceil(). 有沒有更好的方法呢?
uj5u.com熱心網友回復:
這是 ceil 的作業方式,它不會跳到下一小時。
您想要的似乎更像是floor 1h 使用pandas.Timedelta:
df['next'] = df['date'].dt.floor('H') pd.Timedelta('1h')
輸出:
date next
0 2022-01-01 08:00:00 2022-01-01 09:00:00
1 2022-01-01 08:01:00 2022-01-01 09:00:00
2 2022-01-01 08:52:00 2022-01-01 09:00:00
floor和之間的邊界行為差異ceil:
date ceil floor
0 2022-01-01 08:00:00 2022-01-01 08:00:00 2022-01-01 08:00:00
1 2022-01-01 08:01:00 2022-01-01 09:00:00 2022-01-01 08:00:00
2 2022-01-01 08:52:00 2022-01-01 09:00:00 2022-01-01 08:00:00
3 2022-01-01 09:00:00 2022-01-01 09:00:00 2022-01-01 09:00:00
4 2022-01-01 09:01:00 2022-01-01 10:00:00 2022-01-01 09:00:00
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435931.html
下一篇:缺少日期的熊貓的每日最大值
