2

在大熊猫中获取低频时间序列(例如每月或每季度的数据)并将其上采样到每周频率时,我遇到了问题。例如,

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'))

如果s用 PeriodIndex 索引而不是我会得到一个错误: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
4

1 回答 1

0

我就你的问题提出了一个github问题。需要给 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 中。

于 2012-10-11T18:15:47.863 回答