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

如何基于另一Pandas DataFrame的匹配值为目标DataFrame新增列?

解决DataFrame按匹配列添加对应列的问题

这里给你两种简单高效的实现方式,都是基于pandas的常用操作:

方式一:左连接合并(最直观)

因为df2里每个Name只出现一次,直接用左连接就能把对应的ColA、ColB匹配到df1里,还能保留df1所有行(包括重复的Name1条目)。

代码示例:

import pandas as pd

# 构造示例数据(替换成你自己的真实数据即可)
df1 = pd.DataFrame({
    'Name1': ['aaa', 'ccc', 'eee', 'ggg', 'aaa'],
    'Name2': ['bbb', 'ddd', 'fff', 'hhh', 'jjj'],
    'Col1': [1, 9, 2, 13, 25],
    'Col2': [3, 8, 10, 15, 35],
    'Col3': [5, 6, 11, 17, 23],
    'Col4': [7, 4, 12, 19, 41]
})

df2 = pd.DataFrame({
    'Name': ['aaa', 'ggg', 'eee', 'ccc'],
    'ColA': [100, 300, 500, 700],
    'ColB': [200, 400, 600, 800]
})

# 执行左连接,匹配列分别为df1的Name1和df2的Name
result = pd.merge(df1, df2, left_on='Name1', right_on='Name', how='left')
# 删除合并后多余的Name列
result = result.drop('Name', axis=1)

print(result)

方式二:字典映射(轻量化)

如果只是单纯需要添加这两列,用字典映射更简洁,先把df2转成以Name为键的字典,再映射到df1的Name1列上:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'Name1': ['aaa', 'ccc', 'eee', 'ggg', 'aaa'],
    'Name2': ['bbb', 'ddd', 'fff', 'hhh', 'jjj'],
    'Col1': [1, 9, 2, 13, 25],
    'Col2': [3, 8, 10, 15, 35],
    'Col3': [5, 6, 11, 17, 23],
    'Col4': [7, 4, 12, 19, 41]
})

df2 = pd.DataFrame({
    'Name': ['aaa', 'ggg', 'eee', 'ccc'],
    'ColA': [100, 300, 500, 700],
    'ColB': [200, 400, 600, 800]
})

# 将df2转换为字典格式
col_a_dict = df2.set_index('Name')['ColA'].to_dict()
col_b_dict = df2.set_index('Name')['ColB'].to_dict()

# 为df1添加新列
df1['ColA'] = df1['Name1'].map(col_a_dict)
df1['ColB'] = df1['Name1'].map(col_b_dict)

print(df1)

两种方法都能得到你需要的结果:如果后续还有其他合并需求,选第一种;如果只是单纯添加两列,第二种更轻便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:30