我想通过向前填充结果来对每周到每天的频率序列进行上采样。
如果我对原始序列的最后一次观察是font-weight: 900;
,则我希望此值将被以前的有效值代替,但仍保留为NaN
。
设置
NaN
结果
import numpy as np
import pandas as pd
all_dates = pd.date_range(start='2018-01-01', freq='W-WED', periods=4)
ts = pd.Series([1, 2, 3], index=all_dates[:3])
ts[all_dates[3]] = np.nan
ts
Out[16]:
2018-01-03 1.0
2018-01-10 2.0
2018-01-17 3.0
2018-01-24 NaN
Freq: W-WED, dtype: float64
虽然我期望最后一个值也是3。
有人对此行为有一个解释吗?
答案 0 :(得分:1)
重新采样和ffill
的目的只是从一周的第一天开始向前传播-如果一周的第一天是NaN
,那就可以向前填充。例如:
ts.iloc[1] = np.nan
ts.resample('B').ffill()
2018-01-03 1.0
2018-01-04 1.0
2018-01-05 1.0
2018-01-08 1.0
2018-01-09 1.0
2018-01-10 NaN
2018-01-11 NaN
2018-01-12 NaN
2018-01-15 NaN
2018-01-16 NaN
2018-01-17 3.0
2018-01-18 3.0
2018-01-19 3.0
2018-01-22 3.0
2018-01-23 3.0
2018-01-24 NaN
Freq: B, dtype: float64
在大多数情况下, 是从前一周的数据进行传播所不希望的。如果您想在原始(每周)系列中的值缺失的情况下使用前几周的数据,则只需在fillna
上加上ffill
就可以了。
答案 1 :(得分:0)
resample()
返回DatetimeIndexResampler
您需要归还大熊猫Series
。
在填充asfreq()
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.asfreq.html之前,您可以使用Nan
方法进行操作。
所以,这应该起作用:
ts.resample('B').asfreq().ffill()