我有一个稀疏的熊猫系列。为了便于说明,让我们创建一个模拟系列,ts2。
import pandas as pd
idx2 = pd.date_range('2016-01-29', '2016-02-27', freq='W')
ts2 = pd.Series(data=[11, 9, 13, 4], index=idx2)
看起来像
2016-01-31 11
2016-02-07 9
2016-02-14 13
2016-02-21 4
我想用ts2创建(通过前向填充)一个具有不同时间范围的新系列,比如
idx1 = pd.date_range('2016-02-01', '2016-02-28', freq='D')
新的时间序列应该是
2016-02-01 11
2016-02-02 11
2016-02-03 11
2016-02-04 11
2016-02-05 11
2016-02-06 11
2016-02-07 9
2016-02-08 9
...
2016-02-08 4
这样做的好方法是什么?请注意,idx1和idx2的日期不匹配。因此,要在idx1中填充2016-02-01,您必须在ts2中查找2016-01-31值。
编辑:我应该提一下,idx1可能不是每天都有,但可能是一些日期的集合,比如工作日减去挪威的公众假期等等。
答案 0 :(得分:0)
将reindex
与method='ffill'
:
ts2.reindex(idx1, method='ffill')
输出:
2016-02-01 11
2016-02-02 11
2016-02-03 11
2016-02-04 11
2016-02-05 11
2016-02-06 11
2016-02-07 9
2016-02-08 9
2016-02-09 9
2016-02-10 9
2016-02-11 9
2016-02-12 9
2016-02-13 9
2016-02-14 13
2016-02-15 13
2016-02-16 13
2016-02-17 13
2016-02-18 13
2016-02-19 13
2016-02-20 13
2016-02-21 4
2016-02-22 4
2016-02-23 4
2016-02-24 4
2016-02-25 4
2016-02-26 4
2016-02-27 4
2016-02-28 4
Freq: D, dtype: int64
使用resample
和ffill
:
ts2.resample('D').ffill()
输出:
2016-01-31 11
2016-02-01 11
2016-02-02 11
2016-02-03 11
2016-02-04 11
2016-02-05 11
2016-02-06 11
2016-02-07 9
2016-02-08 9
2016-02-09 9
2016-02-10 9
2016-02-11 9
2016-02-12 9
2016-02-13 9
2016-02-14 13
2016-02-15 13
2016-02-16 13
2016-02-17 13
2016-02-18 13
2016-02-19 13
2016-02-20 13
2016-02-21 4
Freq: D, dtype: int64