预测值的滚动均值填充逻辑在2025-07-01后失效求助
问题分析与解决方案
失效原因
当前代码的核心问题在于:
- 你先将
Predicted对应的ratio设为nan,然后直接对整个列计算滚动均值填充。当2025年7月1日后出现连续的Predicted行时,滚动窗口内会没有足够的非nan值(即Actual的ratio),导致滚动均值也变成nan,无法完成填充。 - 默认的
rolling窗口会包含当前行,但当前行是nan,连续多轮后窗口内全是nan,即使min_periods=1也无有效值可用。
修正代码
要实现「仅基于最近7个Actual值的滚动均值填充Predicted行」,需要先分离Actual值计算滚动均值,再映射到Predicted位置:
import pandas as pd import numpy as np # 1. 提取仅包含Actual值的ratio序列,Predicted位置设为nan actual_ratio = df['ratio'].where(df['Actual_v_Predicted'] == "Actual") # 2. 计算基于Actual值的滚动7期均值(仅用之前的Actual值,min_periods=1确保至少1个值就计算) rolling_mean = actual_ratio.rolling(window=7, min_periods=1).mean() # 3. 填充:Actual行保留原值,Predicted行用滚动均值 df['ratio'] = np.where(df['Actual_v_Predicted'] == "Predicted", rolling_mean, df['ratio'])
额外验证点
- 确认你的数据是按时间升序排序的,否则滚动窗口会计算错误的历史值。
- 如果2025年7月1日后的Actual值本身缺失,需要先补充Actual的原始数据,否则滚动均值会持续为
nan。
内容的提问来源于stack exchange,提问作者fluffy
相关产品推荐
相关产品推荐

