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

如何基于ID列匹配对应值批量填充DataFrame的NaN空值

大体量DataFrame按ID匹配填充姓名空值方案

核心思路

因为业务规则明确同一ID对应唯一姓名,且数据集体量极大,全程采用pandas原生向量化操作实现,避免任何Python层逐行/逐组循环,保证填充效率。
处理流程:

  • 先从全表非空的姓名记录中,提取ID到姓名的唯一映射关系
  • 仅定位姓名字段为空的行,用对应行的ID匹配映射值完成批量填充

实现代码

假设存储数据的DataFrame变量名为df,其中存储ID的列名为A,存储姓名的列名为B,直接执行以下代码即可:

import pandas as pd
import numpy as np

# 构建ID-唯一姓名映射:过滤空姓名行、同ID去重,避免一对多冲突
id_name_mapping = df.dropna(subset=["B"]) \
                    .drop_duplicates(subset=["A"], keep="first") \
                    .set_index("A")["B"] \
                    .to_dict()

# 批量填充空值:仅对B列为空的位置做匹配替换
df.loc[df["B"].isna(), "B"] = df.loc[df["B"].isna(), "A"].map(id_name_mapping)

效果验证

用题目给出的示例测试:

  • 初始A列值:[56, 34, 79, 80, 56]
  • 初始B列值:["Michael", "Paula", "Davi", "Luna", np.nan]
    执行代码后,最后一行的NaN会被自动填充为ID 56对应的Michael,符合预期。

注意事项

  • 该实现的处理效率比逐行apply、分组后循环替换的方案高1~2个数量级,千万行级数据可在数秒内完成处理
  • 若存在部分ID全表无对应非空姓名的情况,填充后该类行的B列仍保留NaN,可单独提取这类ID做后续人工补录,不会产生错误填充
  • 如果实际列名不是A/B,把代码里的列名替换成你实际表中的ID列、姓名列名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:36:15