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

如何用Pandas批量为多列填充对应特定列的缺失值?

一次性用对应列填充多列缺失值的高效方法

嘿,我懂你的痛点——单独写一堆np.where来给每列填缺失值太繁琐了,想找个一次性搞定的办法对吧?其实用Pandas自带的方法就能轻松实现,而且比逐列写np.where更简洁高效。

核心思路

先定义一个填充规则字典,把需要填充的列(目标列)和用来填充的参考列一一对应起来,然后通过循环或者字典推导式批量处理。

具体实现步骤

1. 定义填充规则字典

比如你的场景里,BASE_B缺值用BASE_S填,假设还有BASE_C缺值用BASE_D填,就可以这么写:

fill_rules = {
    'BASE_B': 'BASE_S',
    'BASE_C': 'BASE_D'
    # 可以继续添加更多列的对应关系
}

2. 批量填充缺失值

用Pandas的fillna()方法,直接传入对应参考列的Series作为填充值,循环处理每个目标列:

for target_col, source_col in fill_rules.items():
    result1_copy[target_col] = result1_copy[target_col].fillna(result1_copy[source_col])

如果你喜欢更简洁的写法,也可以用assign()配合字典推导式:

result1_copy = result1_copy.assign(**{
    col: result1_copy[col].fillna(result1_copy[fill_rules[col]])
    for col in fill_rules
})

示例验证

我们用一组测试数据来看看效果:

import pandas as pd
import numpy as np

# 构造测试数据
data = {
    'BASE_B': [1, np.nan, 3, np.nan],
    'BASE_S': [10, 20, 30, 40],
    'BASE_C': [np.nan, 5, np.nan, 7],
    'BASE_D': [50, 60, 70, 80]
}
result1_copy = pd.DataFrame(data)

# 应用填充规则
fill_rules = {'BASE_B': 'BASE_S', 'BASE_C': 'BASE_D'}
for target, source in fill_rules.items():
    result1_copy[target] = result1_copy[target].fillna(result1_copy[source])

print(result1_copy)

输出结果:

BASE_B  BASE_S  BASE_C  BASE_D
0     1.0      10    50.0      50
1    20.0      20     5.0      60
2     3.0      30    70.0      70
3    40.0      40     7.0      80

可以看到,BASE_B的缺失值被BASE_S对应行的值填上了,BASE_C的缺失值也被BASE_D对应行的值完美填充,完全符合你的需求。

补充说明

如果你的场景里除了填充缺失值,还有额外的条件判断(比如不是所有缺值都用对应列填,而是满足某些条件才填),那可以把fillna()换成np.where,放在循环里同样能批量处理:

for target_col, source_col in fill_rules.items():
    result1_copy[target_col] = np.where(
        pd.isnull(result1_copy[target_col]),  # 判断是否缺值
        result1_copy[source_col],             # 缺值时用参考列填充
        result1_copy[target_col]              # 不缺值时保留原值
    )

这种写法和你原来的逐列写法逻辑一致,但通过循环避免了重复代码,维护起来更方便。

内容的提问来源于stack exchange,提问作者asimo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:07:42