如何用Pandas基于过去12个月变化率填充DataFrame多列缺失值?
批量填充DataFrame多列缺失值(基于过去12个月变化率)
实现思路
- 针对DataFrame中的数值型字段逐列处理,逐行检查缺失值
- 遇到缺失值时,通过上一行有效值和上一行往前推12行的有效值,按公式
填充值 = 上一行值 + (上一行值 - 12个月前值)/12计算填充 - 仅处理具备足够历史数据(存在12个月前记录)的缺失行
Python代码实现
import pandas as pd def fill_missing_with_12m_rate(df): # 复制原数据集,避免修改原始数据 filled_df = df.copy() # 筛选所有需要处理的数值型列,也可手动指定列如['weight_a', 'weight_b'] target_cols = filled_df.select_dtypes(include=['int64', 'float64']).columns for col in target_cols: # 从第13行开始遍历(索引从0起,确保有12行历史数据) for i in range(12, len(filled_df)): if pd.isna(filled_df.loc[i, col]): # 获取计算所需的前置有效值 prev_val = filled_df.loc[i-1, col] val_12_ago = filled_df.loc[i-1-12, col] # 前置值非空时才执行填充计算 if not pd.isna(prev_val) and not pd.isna(val_12_ago): filled_df.loc[i, col] = prev_val + (prev_val - val_12_ago)/12 return filled_df
使用示例
# 加载你的测试数据集 # df = pd.read_csv('your_test_dataset.csv') # 执行缺失值填充 filled_dataset = fill_missing_with_12m_rate(df)
注意事项
- 若需指定特定列处理,可将
target_cols替换为目标列列表,比如['weight_a', 'weight_b', 'weight_c'] - 若缺失行的上一行或12个月前的值本身为空,函数会跳过该行填充,可根据业务需求补充边界处理逻辑
内容的提问来源于stack exchange,提问作者swin cine
相关产品推荐
相关产品推荐

