1
我有一個關於熊貓Dataframes重採樣方法的問題。 我有每天一個觀察的數據框:熊貓Dataframe重採樣與特定日期
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(366, 1)), columns=list('A'))
df.index = pd.date_range(datetime.date(2016,1,1),datetime.date(2016,12,31))
,如果我要計算每月的總和(或其他),我可以直接做:
EOM_sum = df.resample(rule="M").sum()
但是我有一個特定日曆(不規則頻率):
import datetime
custom_dates = pd.DatetimeIndex([datetime.date(2016,1,13),
datetime.date(2016,2,8),
datetime.date(2016,3,16),
datetime.date(2016,4,10),
datetime.date(2016,5,13),
datetime.date(2016,6,17),
datetime.date(2016,7,12),
datetime.date(2016,8,11),
datetime.date(2016,9,10),
datetime.date(2016,10,9),
datetime.date(2016,11,14),
datetime.date(2016,12,19),
datetime.date(2016,12,31)])
如果我想計算每個週期的總和,我目前添加一個臨時列,每行屬於上述期間的結束,則p的df,通過一組來執行操作:
df["period"] = custom_dates[custom_dates.searchsorted(df.index)]
custom_sum = df.groupby(by=['period']).sum()
但是,這是非常骯髒,看起來不pythonic。在Pandas中是否有內置的方法? 在此先感謝。
新列不是必需的,您可以使用'custom_sum = df.groupby(custom_dates [custom_dates.searchsorted(df.index)])。sum()' – jezrael
熊貓重採樣方法基於使用頻率索引某種程度上。您使用的方法是正確的方法,請參閱上面的@jezrael的回答,以跳過添加的列 – James
謝謝,我只是感到驚訝,因爲它與「重採樣」方法非常接近,所以Pandas中沒有這樣做。 – JMat