Pandas两个DataFrame值匹配后新增对应Name列实现方法咨询
实现方案
你可以通过以下两种方式实现需求,优先推荐性能更高的字典映射方案:
方案1:字典映射(推荐)
先将第一个DataFrame转为Values到Name的映射字典,再对第二个DataFrame的匹配列做映射:
# 构建值到名称的映射字典 name_mapper = df1.set_index('Values')['Name'].to_dict() # 新增Name列,匹配失败填充为not found df3 = df2.assign(Name=df2['Values2'].map(name_mapper)).fillna({'Name': 'not found'}) # 若需要对齐期望的列顺序,补充以下代码 df3 = df3[['Values2', 'Name', 'Score', 'Address', 'Group', 'Remark', 'Grade']]
该方案逻辑简洁,大数据量下性能远高于循环或匹配判断方法。
方案2:左连接实现
也可以通过pandas的merge左连接实现:
# 左连接匹配字段 df3 = df2.merge(df1, left_on='Values2', right_on='Values', how='left') # 填充未匹配的Name值,删除多余列 df3['Name'] = df3['Name'].fillna('not found') df3 = df3.drop(columns=['Values']) # 调整列顺序和期望输出一致 df3 = df3[['Values2', 'Name', 'Score', 'Address', 'Group', 'Remark', 'Grade']]
两种方案运行后输出的结果均和你给出的期望结构完全一致。
内容的提问来源于stack exchange,提问作者user890234
相关产品推荐
相关产品推荐

