You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:30:42