Python 通过正向填充稀疏序列来创建新的熊猫系列
我有一个稀疏的熊猫系列。为了便于说明,让我们创建一个模拟系列ts2Python 通过正向填充稀疏序列来创建新的熊猫系列,python,pandas,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创建(通过正
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可能不是每天都有,但可能是一些日期的集合,如工作日减去挪威的公共假日或其他什么。EDIT:idx1是否有特殊的缺失日期或假日
将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
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
或者如果idx1只是一个每日增量。
使用重采样
和ffill
:
ts2.resample('D').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
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
编辑:如果idx1有特殊缺失的天数或假日
将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
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
或者如果idx1只是一个每日增量。
使用重采样
和ffill
:
ts2.resample('D').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
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
谢谢,但它没有与idx1相同的索引。好的,在上面的例子中,它是每日的,但idx1只能是工作日,公共假日除外。@Spinor8请参阅编辑,如果idx使用方法'ffill'。我认为问题是,
idx1
不包含来自ts2.index
的min()日期,因此无法向前填充该值。这可能是我理解错了。谢谢,但这和idx1没有相同的索引。好的,在上面的例子中,它是每日的,但idx1只能是工作日,公共假日除外。@Spinor8请参阅编辑,如果idx使用方法'ffill'。我认为问题是,idx1
不包含来自ts2.index
的min()日期,因此无法向前填充该值。可能我解释错了。你能编辑idx1以引用ts2索引中的min()值吗?或者有什么东西禁止这样做?通常idx1不是每日的。您可以编辑idx1以引用ts2索引中的min()值吗?还是有什么东西禁止这样做?一般来说,idx1不是每天都有。