【问题标题】:Dealing missing data as moving average of last 5 observations in time series in python在python中将缺失数据处理为时间序列中最后5个观察值的移动平均值
【发布时间】:2020-08-04 05:25:17
【问题描述】:

我有一个时间序列数据,其日期间隔长达 4 个月。填充这些缺失数据值的最佳方法是什么。

数据看起来像:

            Qty
Date
2016-04-01  0.125
2016-05-01  2.750
2016-06-01  4.825
2016-07-01  5.625
2016-08-01  2.475
2016-09-01  NaN
2016-10-01  NaN
2016-11-01  NaN
2016-12-01  1.000
2017-01-01  2.500

我试过这个:

data_mean = data.cumsum() / (~data.isna()).cumsum()
data_mean = data_mean.fillna(method = "ffill")
data = data.fillna(value = data_mean)

但是,这对于预测来说效果很好。我也尝试过使用 interpolate() 方法,但效果非常好。

场景是:存在缺失值的地方,在该日期没有购买数量。我需要填写那些缺失的日期,以便以后进行预测。

我想在 python 中尝试用最后 5 次观察到相应缺失值位置的移动平均值来填充缺失值。 请在这种情况下提供帮助。谢谢。

【问题讨论】:

    标签: python missing-data moving-average


    【解决方案1】:

    您可能应该使用 for 循环来实现这一点,如下所示:

    for i in range(len(df)):
        if pd.isna(df.iloc[i, 1]):
            moving = df.iloc[i-5:i, 1].mean()
            df.iloc[i, 1] = moving
    

    【讨论】:

    • 您好 Djerro,感谢您的回复。它的抛出错误。 IndexError:单个位置索引器超出范围。
    • 你们中的任何一个前 5 个值是 nan 吗?
    • 不,第 6 和第 7 个值是 nan
    • 固定:对于范围内的 i(len(df)): if pd.isna(df['Qty'].iloc[i]):moving = data['Qty'].iloc[ i-5:i].mean() data['Qty'].iloc[i] = 移动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多