通过向前填充稀疏序列来创建新的Pandas序列

2024-04-27 18:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: importpandasdatadateindexas时间range
1条回答
网友
1楼 · 发布于 2024-04-27 18:23:01

编辑:如果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

相关问题 更多 >