如何基于多列匹配将一个DataFrame的指定列添加到另一个DataFrame
Pandas 双字段匹配补全缺失ID方案
你可以直接用pandas的merge左连接实现需求,以Name、Age两个字段作为匹配键,从完整表中映射对应的ID值补到缺失表中,具体实现代码如下:
首先导入依赖库:
import pandas as pd
模拟你给出的两个DataFrame示例:
# 数据完整的DataFrame df_full = pd.DataFrame({ 'ID': ['012', '013', '014'], 'Name': ['Dave', 'Colin', 'Dave'], 'Age': [45, 63, 52] }) # ID字段缺失的DataFrame df_missing = pd.DataFrame({ 'ID': [None, None, None], 'Name': ['Dave', 'Colin', 'Dave'], 'Age': [45, 63, 52] })
核心补全逻辑:
df_filled = pd.merge( # 左侧保留缺失ID表的所有行,删除原有空ID列 left=df_missing.drop(columns=['ID']), # 右侧仅取完整表的ID和两个匹配字段,避免多余字段干扰 right=df_full[['ID', 'Name', 'Age']], # 指定匹配依据为Name、Age两个字段 on=['Name', 'Age'], # 采用左连接,完全保留缺失表的原有数据行顺序和数量 how='left' )
运行后得到的df_filled就是补全ID后的结果,和你需要的结构完全一致。
注意:如果你的业务场景中存在同一个Name+Age组合对应多个不同ID的情况,左连接会生成重复行,可根据业务规则添加去重逻辑,比如保留第一个匹配到的ID,可在merge后追加如下代码:
df_filled = df_filled.drop_duplicates(subset=['Name', 'Age'], keep='first')
内容的提问来源于stack exchange,提问作者user15470345
相关产品推荐
相关产品推荐

