我正在使用pandas将低频数据转换为更高的频率(例如每月到每天).进行此转换时,我希望得到的更高频率索引跨越整个低频窗口.例如,假设我有一个月度系列,如下所示:
import numpy as np
from pandas import *
data = np.random.randn(2)
s = Series(data, index=date_range('2012-01-01', periods=len(data), freq='M'))
s
2012-01-31 0
2012-02-29 1
现在,我将其转换为每日频率:
s.resample('D')
2012-01-31 0
2012-02-01 NaN
2012-02-02 NaN
2012-02-03 NaN
...
2012-02-27 NaN
2012-02-28 NaN
2012-02-29 1
请注意结果输出如何从2012-01-31到2012-02-29.但我真正想要的是从2011-01-01到2012-02-29的日子,所以每日指数“填补”整个1月,即使2012-01-31仍然是唯一的非NaN观察月.
我也很好奇是否有内置方法可以更好地控制较高频率周期如何用较低频率值填充.在每月每日示例中,默认值是仅填写每个月的最后一天;如果我使用Periodindex索引我的系列我也可以s.resample(‘D’,convention =’start’)只填充第一个观察.但是,我也希望选项在每个月填写每月的价值,并以每日平均值(每月价值除以当月的天数)填写每一天.
请注意,基本的回填和向前填充不足以用月值填充当月的每日观察值.例如,如果月度序列从1月到3月运行但2月值为NaN,则向前填充会将1月值带入2月,这是不希望的.
解决方法:
这个怎么样?
s.reindex(DatetimeIndex(start=s.index[0].replace(day=1), end=s.index[-1], freq='D'))