我在大熊猫中采用较低频率的时间序列时遇到问题,例如每月或每季度的数据,并将其上采样到每周频率。例如,
data = np.arange(3, dtype=np.float64)
s = Series(data, index=date_range('2012-01-01', periods=len(data), freq='M'))
s.resample('W-SUN')
导致一系列充满了NaN的地方。基本上如果我这样做会发生同样的事情:
s.reindex(DatetimeIndex(start=s.index[0].replace(day=1), end=s.index[-1], freq='W-SUN'))
如果使用PeriodIndex索引s
,我会收到错误:ValueError: Frequency M cannot be resampled to <1 Week: kwds={'weekday': 6}, weekday=6>
我可以理解为什么会发生这种情况,因为每周日期与月度日期不完全一致,而周数可能会重叠数月。但是,我想实现一些简单的规则来处理这个问题。特别是,(1)将月末结束的月份设置为月度值,(2)将月末结束的第一周设置为月度值,或者(3)将月末结束的所有周设置为月度值。有什么方法可以实现这一目标?我可以想象想要将其扩展到每周一次的数据。
编辑:我理想情况下的案例(1)输出的一个例子是:
2012-01-01 NaN
2012-01-08 NaN
2012-01-15 NaN
2012-01-22 NaN
2012-01-29 0
2012-02-05 NaN
2012-02-12 NaN
2012-02-19 NaN
2012-02-26 1
2012-03-04 NaN
2012-03-11 NaN
2012-03-18 NaN
2012-03-25 2
答案 0 :(得分:0)
我就你的问题提出了github issue。需要将相关功能添加到pandas。
案例3可通过fill_method直接实现:
In [25]: s
Out[25]:
2012-01-31 0
2012-02-29 1
2012-03-31 2
Freq: M
In [26]: s.resample('W', fill_method='ffill')
Out[26]:
2012-02-05 0
2012-02-12 0
2012-02-19 0
2012-02-26 0
2012-03-04 1
2012-03-11 1
2012-03-18 1
2012-03-25 1
2012-04-01 2
Freq: W-SUN
但是对于其他人来说,你现在必须做一些扭曲,希望在下一个版本之前通过github问题来解决这个问题。
此外,您似乎也希望即将推出的“跨度”重新采样约定将从第一个时段的开始到最后一个时段的结束进行上采样。我不确定是否有一种简单的方法来锚定DatetimeIndex的起点/终点,但它至少应该用于PeriodIndex。