用滚动平均值填充Nans,滚动平均值是实际数据+计算的滚动平均值的组合

问题描述 投票:0回答:1

我试图找到解决方案,但未能成功。所以问。 我有一个数据集,我希望预测数据集中各组的未来日期的值。目标是用过去 5 天的滚动平均值填充 NAN,其中实际可用的情况下使用实际值,而实际不可用的情况下使用滚动平均值。

样本数据

enter image description here

值 5 10 15 20 25 空 50 空 空 预计 5 10 15 15 20 25 15 50 25 27

这是我用来尝试获得预期值但以奇怪的结果结束的代码:

df_grouped_index['RETENTION_FCST_IMPUTED'] = (
    df_grouped_index
    .sort_values(['INSTALLMENT_KEY', 'PLATFORM_SDESC', 'RELATIVE_DAY_KEY', 'DAY_KEY'])
    .groupby(['INSTALLMENT_KEY', 'PLATFORM_SDESC', 'RELATIVE_DAY_KEY'], group_keys=False)
    .apply(lambda x: (
        x['RETENTION_CALCULATED']
        #.fillna(method='ffill')  # Forward fill within each group to avoid NaNs in the rolling mean
        .rolling(6, min_periods=1, win_type = None , method= 'single') 
        .mean()
        .where(x['RETENTION_CALCULATED'].isnull())  # Only apply to original NaNs
        .combine_first(x['RETENTION_CALCULATED'])
    ))
)

enter image description here

pandas nan rolling-computation
1个回答
0
投票

如果您想使用最后 5 个值(忽略 NaN),请组合

rolling.mean
shift
fillna

df['out'] = df['VALUE'].fillna(df['VALUE'].rolling(5, min_periods=1).mean().shift())

这给出的值与您的示例中略有不同。

输出:

   VALUE  EXPECTED        out
0    5.0         5   5.000000
1   10.0        10  10.000000
2   15.0        15  15.000000
3   20.0        20  20.000000
4   25.0        25  25.000000
5    NaN        15  15.000000
6   50.0        50  50.000000
7    NaN        25  27.500000
8    NaN        27  31.666667
© www.soinside.com 2019 - 2024. All rights reserved.