通过向前填充稀疏系列

时间:2017-05-22 15:21:39

标签: python pandas

我有一个稀疏的熊猫系列。为了便于说明,让我们创建一个模拟系列,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可能不是每天都有,但可能是一些日期的集合,比如工作日减去挪威的公众假期等等。

1 个答案:

答案 0 :(得分:0)

编辑:如果idx1有特殊的缺失日或假期

reindexmethod='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

或者,如果idx1只是每日增量。

使用resampleffill

 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