Python使用10日滚动平均值填充DataFrame不足2年列的缺失数据
实现方案
该需求完全可以实现,核心逻辑是按时间顺序逐行填充缺失值,每次计算当前行对应列的前10条历史数据(含已填充的数值)的平均值作为填充值,具体实现代码如下:
前置操作
提前导入pandas库后执行以下代码即可:
import pandas as pd # 1. 将数据集的日期索引转换为标准时间格式,按时间升序排序避免窗口计算错误 df.index = pd.to_datetime(df.index, format='%d/%m/%Y') df = df.sort_index() # 2. 自动识别所有存在缺失值、需要填充的列 cols_to_fill = df.columns[df.isna().any()].tolist() # 3. 逐列逐行完成10日滚动平均填充 for col in cols_to_fill: # 定位当前列第一个缺失值的起始位置 first_na_pos = df.index.get_loc(df[col].isna().idxmax()) # 从第一个缺失值开始向后遍历所有行 for row_idx in range(first_na_pos, len(df)): # 取当前行往前最多10条历史数据计算平均值,作为当前行的填充值 window_data = df[col].iloc[max(0, row_idx - 10) : row_idx] df.iloc[row_idx, df.columns.get_loc(col)] = window_data.mean()
逻辑说明
- 代码自动识别所有存在缺失值的列,无需手动指定列名
- 每次计算仅使用当前行之前的历史数据,不会用到后续未产生的数值,符合真实统计逻辑
- 若前10条窗口内存在少量原始缺失值,会自动基于窗口内的有效值计算平均;如果要求必须满足10个有效值才计算,可以额外添加判断条件,窗口内有效值数量不足时改用该列全部历史均值填充即可。
内容的提问来源于stack exchange,提问作者spcol
相关产品推荐
相关产品推荐

