【问题标题】:Pandas: filling missing values in time series forward using a formulaPandas:使用公式向前填充时间序列中的缺失值
【发布时间】:2019-03-06 16:05:30
【问题描述】:

我在 DataFrame 中有一个时间序列的数据,在样本的开头和结尾都有缺失值。

我正在尝试通过使用简单的 AR(1) 过程将其向前增长来填充 end 处的缺失值。

例如,

X(t+1) - X(t) = 0.5*[X(t) - X(t-1)]

A = [np.nan, np.nan, 5.5, 5.7, 5.9, 6.1, 6.0, 5.9, np.nan, np.nan, np.nan]  

df = pd.DataFrame({'A':A}, index = pd.date_range(start = '2010', 
                                                 periods = len(A),
                                                 freq = "QS"))

              A
2010-01-01  5.5
2010-04-01  5.7
2010-07-01  5.9
2010-10-01  6.1
2011-01-01  6.0
2011-04-01  5.9
2011-07-01  NaN
2011-10-01  NaN
2012-01-01  NaN

我想要什么:

                 A
2010-01-01     NaN
2010-04-01     NaN
2010-07-01  5.5000
2010-10-01  5.7000
2011-01-01  5.9000
2011-04-01  6.1000
2011-07-01  6.0000
2011-10-01  5.9000
2012-01-01  5.8500
2012-04-01  5.8250
2012-07-01  5.8125

获取该系列的下一个条目相对容易:

NEXT = 0.5*df.dropna().diff().iloc[-1] + df.dropna().iloc[-1]

但是以一种很好的方式将它附加到 DataFrame 给我带来了一些麻烦。

【问题讨论】:

  • 也许你可以找到使用rolling的方法。

标签: python pandas dataframe


【解决方案1】:

您可以使用以下代码进行操作:

A = [np.nan, np.nan, 5.5, 5.7, 5.9, 6.1, 6.0, 5.9, np.nan, np.nan, np.nan]

df = pd.DataFrame({'A': A}, index=pd.date_range(start='2010', periods=len(A), freq="QS"))

for id in df[df.A.isnull() == True].index:
    df.loc[id, 'A'] = 1.5 * df.A.shift().loc[id] - 0.5 * df.A.shift(2).loc[id]

#Output dataframe
                 A
2010-01-01     NaN
2010-04-01     NaN
2010-07-01  5.5000
2010-10-01  5.7000
2011-01-01  5.9000
2011-04-01  6.1000
2011-07-01  6.0000
2011-10-01  5.9000
2012-01-01  5.8500
2012-04-01  5.8250
2012-07-01  5.8125

【讨论】:

    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多