我有一个关于 Pandas 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))
Run Code Online (Sandbox Code Playgroud)
如果我想计算每个月的总和(或其他),我可以直接做:
EOM_sum = df.resample(rule="M").sum()
Run Code Online (Sandbox Code Playgroud)
但是我有一个特定的日历(不规则频率):
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)])
Run Code Online (Sandbox Code Playgroud)
如果我想计算每个时期的总和,我目前向 df 添加一个临时列,每行所属的时期结束,然后使用 groupby 执行操作:
df["period"] = custom_dates[custom_dates.searchsorted(df.index)]
custom_sum = df.groupby(by=['period']).sum()
Run Code Online (Sandbox Code Playgroud)
然而,这很脏,看起来不像pythonic。在 Pandas 中是否有内置方法可以做到这一点?提前致谢。