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

如何高效利用唯一ID标准化Pandas DataFrame中的姓名变体?

高效实现方法

步骤1:构建全局ID-姓名映射字典

先把所有ID列和对应姓名列的配对数据整合,按ID去重后取第一个出现的姓名作为标准值,生成映射字典:

import pandas as pd

# 初始化示例DataFrame
df = pd.DataFrame({
    'left1_id': ['01', '01', '03', '04'],
    'right1_id': ['02', '02', '04', '03'],
    'left2_id': ['03', '03', '01', '01'],
    'right2_id': ['04', '04', '02', '02'],
    'left1_name': ['John Doe', 'John A. Doe', 'Mike D. Smith', 'Ana B. Smith'],
    'right1_name': ['Jane Doe', 'Jane Doe', 'Ana Smith', 'Mike D. Smith'],
    'left2_name': ['Mike Smith', 'Mike Smith', 'John Doe', 'John C. Doe'],
    'right2_name': ['Ana Smith', 'Ana B. Smith', 'Jane C. Doe', 'Jane C. Doe']
})

# 定义所有ID列与对应姓名列的配对关系
id_name_pairs = [
    ('left1_id', 'left1_name'),
    ('right1_id', 'right1_name'),
    ('left2_id', 'left2_name'),
    ('right2_id', 'right2_name')
]

# 收集所有ID-姓名对并合并
all_id_name_pairs = pd.concat([
    df[[id_col, name_col]].rename(columns={id_col: 'id', name_col: 'name'})
    for id_col, name_col in id_name_pairs
])

# 生成映射字典:按ID去重,保留首次出现的姓名
id_name_map = all_id_name_pairs.drop_duplicates(subset='id', keep='first') \
                               .set_index('id')['name'] \
                               .to_dict()

步骤2:批量标准化所有姓名列

遍历每个姓名列,根据对应的ID列值,用映射字典批量替换姓名:

for id_col, name_col in id_name_pairs:
    df[name_col] = df[id_col].map(id_name_map)

方法优势

  • 利用Pandas向量化操作替代逐行循环,处理大数据集时效率更高
  • 全局映射字典只需构建一次,避免重复计算
  • 扩展性强:新增ID/姓名列时,只需在id_name_pairs中添加对应关系即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:09:51