我有一个关于 Pandas 数据框重采样方法的问题。我的数据框每天只有一个观测值:
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)])
如果我想计算每个时期的总和,我目前会在df中添加一个临时列,该列包含每行所属的时期结束时间,然后使用groupby执行操作:
df["period"] = custom_dates[custom_dates.searchsorted(df.index)]
custom_sum = df.groupby(by=['period']).sum()
然而这种方法相当不规范,看起来并不符合Python风格。在Pandas中有没有内置的方法可以做到这一点呢? 提前致谢。
custom_sum = df.groupby(custom_dates[custom_dates.searchsorted(df.index)]).sum()
。 - jezrael