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

如何用Pandas按name匹配将df1的对应数据填充到df2

原有代码的错误点

  • 合并主表颠倒:你需要保留df2的全部name行,匹配df1的字段值,应该以df2为左表,原代码用df1做左表会输出df1的全部行,不符合需求
  • 关联键大小写不匹配:两个表的关联字段名是小写name,原代码写为大写NAME,无法正常关联
  • 未处理重复字段:df2本身自带三个空的待填充字段,直接合并会生成带后缀的重复字段,无法得到预期结果

正确实现代码

方法1:merge关联实现(推荐,逻辑简单清晰)

import pandas as pd

# 读取数据,pd.read_excel本身返回DataFrame,不需要额外嵌套pd.DataFrame
df1 = pd.read_excel('df1.xlsx', sheet_name=0)
df2 = pd.read_excel('df2.xlsx', sheet_name=0)

# 仅保留df2的name列,删掉空的待填充字段后和df1关联
result = df2[['name']].merge(df1, on='name', how='left')

# 如果需要导出结果到Excel执行下面这句即可
# result.to_excel('填充后的df2.xlsx', index=False)

方法2:映射填充实现(直接修改原df2,保留df2原有结构)

import pandas as pd

df1 = pd.read_excel('df1.xlsx', sheet_name=0)
df2 = pd.read_excel('df2.xlsx', sheet_name=0)

# 将df1设置为以name为索引的映射表
name_map = df1.set_index('name')
# 逐个填充字段到df2
for fill_col in ['SCORE', 'height', 'weight']:
    df2[fill_col] = df2['name'].map(name_map[fill_col])

两种方法都会严格保留df2原本的name顺序,即使两个表的name顺序打乱也不影响匹配结果。

内容的提问来源于stack exchange,提问作者huaye sun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:45:03