重新取样10D,但直到月底



我想重新采样频率为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

相关内容

  • 没有找到相关文章

最新更新