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

如何匹配两个DataFrame的name列,为df2添加对应df1的id列

解决Pandas匹配DataFrame并添加对应ID的问题

原代码问题说明

你当前的遍历代码里,if (row["name"],) in TypeNameList:的判断逻辑有误——TypeNameList是字符串列表,而(row["name"],)是元组,永远无法匹配,所以不会执行后续操作。

推荐解决方案(高效简洁)

Pandas原生的关联操作比手动遍历高效得多,这里提供两种最优方法:

方法1:使用merge左连接(推荐)

直接通过merge按name列关联两个DataFrame,保留df2的所有行,匹配不上的ID自动为空:

# 仅保留df1中需要的name和id列,左连接df2
df2 = df2.merge(df1[['name', 'id']], on='name', how='left')

执行后df2就会得到你需要的结构,未匹配的id列值为NaN(空值)。

方法2:使用map映射

先构建name到id的字典,再映射到df2的name列:

# 创建name对应id的字典
name_id_map = df1.set_index('name')['id'].to_dict()
# 给df2添加id列,匹配不到则返回空
df2['id'] = df2['name'].map(name_id_map)

修正后的遍历方法(不推荐,仅适配你的原有思路)

如果一定要用遍历实现,需要修正判断逻辑,并提前构建映射字典提升效率:

# 先初始化id列为空
df2['id'] = None
# 构建name到id的映射字典,避免循环内重复查询
name_id_dict = df1.set_index('name')['id'].to_dict()
TypeNameList = df1['name'].tolist()

for index, row in df2.iterrows():
    current_name = row['name']
    if current_name in TypeNameList:
        # 给当前行的id列赋值
        df2.loc[index, 'id'] = name_id_dict[current_name]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:25:28