Python如何基于多列匹配规则填充指定列的空值数据
实现方案
前置注意事项
首先需要确保数据中的空值是pandas可识别的np.nan或pd.NA类型,若你的数据中是字符串格式的「空值」,先执行替换:
import pandas as pd import numpy as np df = df.replace('空值', np.nan)
核心实现代码
你的需求可以通过groupby+transform+fillna的组合实现,逻辑是按三个匹配字段分组后,取每组内目标字段的第一个非空值填充同组的所有空值:
# 定义需要填充的目标字段列表 fill_columns = ['E-COM1', 'E-COM2', 'E-RES1'] # 按ID、ID_2、CIRCUIT三个字段分组,完成填充 df[fill_columns] = df.groupby(['ID', 'ID_2', 'CIRCUIT'])[fill_columns].transform( lambda group: group.fillna(group.first()) )
结果验证
以你提供的示例数据为例,执行代码后输出结果如下:
| ID | ID_2 | CIRCUIT | E-COM1 | E-COM2 | E-RES1 |
|---|---|---|---|---|---|
| 45345 | 342425 | 4453 | 2 | 3 | 3 |
| 45345 | 342425 | 4453 | 2 | 3 | 3 |
常见问题排查
如果你之前执行fillna不生效,大概率是以下原因:
- 空值为字符串格式,未转为pandas可识别的空值类型
- 分组时未完整包含三个匹配字段,导致分组范围错误
- 未搭配
transform方法使用,导致分组计算后的结果无法正确对齐原表索引
内容的提问来源于stack exchange,提问作者Jordan P.
相关产品推荐
相关产品推荐

