我想重新采样频率为10D的DataFrame,但总是在月底切割最后十年。ES:
print(df)
data
index
2010-01-01 145.08
2010-01-02 143.69
2010-01-03 101.06
2010-01-04 57.63
2010-01-05 65.46
...
2010-02-24 48.06
2010-02-25 87.41
2010-02-26 71.97
2010-02-27 73.1
2010-02-28 41.43
应用类似df.resample('10DM').mean()
的东西
data
index
2010-01-10 97.33
2010-01-20 58.58
2010-01-31 41.43
2010-02-10 35.17
2010-02-20 32.44
2010-02-28 55.44
请注意,第1个和第2个十年是正常的10D重采样,但第3个十年可以是基于月份和年份的8-9-10-11天。
提前谢谢。
样本数据(易于检查(:
# df = pd.DataFrame({"value": np.arange(1, len(dti)+1)}, index=dti)
>>> df
value
2010-01-01 1
2010-01-02 2
2010-01-03 3
2010-01-04 4
2010-01-05 5
...
2010-02-24 55
2010-02-25 56
2010-02-26 57
2010-02-27 58
2010-02-28 59
您需要按(天、月、年(创建组:
grp = df.groupby([pd.cut(df.index.day, [0, 10, 20, 31]),
pd.Grouper(freq='M'),
pd.Grouper(freq='Y')])
现在你可以计算每组的平均值:
out = grp['value'].apply(lambda x: (x.index.max(), x.mean())).apply(pd.Series)
.reset_index(drop=True).rename(columns={0:'date', 1:'value'})
.set_index('date').sort_index()
输出结果:
>>> out
value
date
2010-01-10 5.5
2010-01-20 15.5
2010-01-31 26.0
2010-02-10 36.5
2010-02-20 46.5
2010-02-28 55.5