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

如何基于Name匹配将Table1的ID赋值给Table2的ID列?

问题与解决方法

现有两个DataFrame

Table 1

IDNameColumn CColumn D
1234hjBob11
nkj234Joe22
ji3251Schmoe33

Table 2

IDName
Bob
Joe
Sam

需求

当Name字段匹配时,将Table1中的ID提取并设置为Table2的ID。

问题代码

尝试了以下代码但未达到预期:

df2['ID'] = np.where(df['Name'] == df2['Name'], 
                        df['Prompt'], df2['ID'])

代码问题分析

  1. 变量名错误:代码中使用的df未定义,应对应Table1的df1;同时不存在df['Prompt']字段,实际需要提取的是df1['ID']。
  2. 匹配逻辑错误:直接逐元素比较df1['Name'] == df2['Name']会触发广播,无法实现按Name精准匹配的需求。

正确实现方法

方法1:使用字典映射(高效简洁)

先从Table1构建Name到ID的映射关系,再批量匹配Table2的Name字段:

# 从df1创建Name对应ID的字典
name_to_id = df1.set_index('Name')['ID'].to_dict()
# 为df2的ID赋值,匹配不到的保留原空值
df2['ID'] = df2['Name'].map(name_to_id).fillna(df2['ID'])

方法2:使用DataFrame合并(适合复杂场景)

通过左连接合并两个表,保留Table2的所有行,匹配对应的ID:

# 仅保留df1中需要的Name和ID字段,左连接到df2
merged_result = df2.merge(df1[['Name', 'ID']], on='Name', how='left', suffixes=('_old', '_new'))
# 用匹配到的新ID替换原ID,无匹配的保留原空值
df2['ID'] = merged_result['ID_new'].fillna(merged_result['ID_old'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:01:35