我有一個全年每小時系列,我們可以稱之為“日歷”:from pandas import date_range, Seriescalendar = Series( index=date_range("2006-01-01", "2007-01-01", freq="H", closed="left", tz="utc"), data=range(365 * 24))現在我有一個新索引,它是另一個每小時序列,但在任意日期時間開始和結束:index = date_range("2019-01-01", "2020-10-02", freq="H", tz="utc")我想創建一個result具有相同索引的新系列index,并且對于每個月-日-小時組合,它從calendar.我可以迭代得到一個像這樣的工作解決方案,只是try-except忽略 2 月 29 日:result = Series(index=index, dtype="float")for timestamp in result.index: try: calendar_timestamp = timestamp.replace(year=2006) except: continue result.loc[timestamp] = calendar.loc[calendar_timestamp]然而,這是非常低效的,所以有人知道如何做得更好嗎?更好是指特別快(CPU 時間方面)。限制/注釋:沒有 Numba,也沒有 Cython,只有 CPython 和 Pandas/NumPy可以將 2 月 29 日保留為 NaN 值,因為日歷中沒有表示這一天我們總是可以假設索引已正確排序并且沒有間隙(這同樣適用于日歷)
1 回答

RISEBY
TA貢獻1856條經驗 獲得超5個贊
讓我們嘗試將組合提取為字符串和映射:
cal1 = pd.Series(calendar.values, index=calendar.index.strftime('%m%d%H')) result = index.to_series().dt.strftime('%m%d%H').map(cal1)
輸出:
添加回答
舉報
0/150
提交
取消