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