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

Pandas如何匹配两个不同DataFrame的Request ID列并复制对应联系人邮箱

报错原因
  • 你的代码中df.loc['Request ID']的作用是从DataFrame的行索引中查找名为Request ID的行,而非提取Request ID列,所以触发了KeyError,提示你给出的ID值不存在于行索引中
  • 即使修正了取列的写法,直接用if判断两个Series是否相等的逻辑也不符合pandas的向量化操作规则,无法实现逐行匹配的需求
正确实现方法

下面给出两种常用的实现方案:

方案1:左连接实现(更稳妥,适合多字段匹配场景)

通过pandas的merge左连接能力,在保留df2所有原始行和字段的前提下,匹配对应Contact E-mail值:

# 仅取df1中匹配需要的字段做左连接
df2 = df2.merge(
    df1[['Request ID', 'Contact E-mail']],
    on='Request ID',
    how='left'
).rename(columns={'Contact E-mail': 'Email'})

# 将无匹配的空值替换为空字符串
df2['Email'] = df2['Email'].fillna('')

方案2:映射字典实现(代码更简洁,适合单字段匹配场景)

先将df1的Request ID和Contact E-mail做成映射字典,再对df2的Request ID做映射填充:

# 生成ID到邮箱的映射字典
id_email_map = df1.set_index('Request ID')['Contact E-mail'].to_dict()
# 映射填充新列,无匹配项自动填充空值后替换为空字符串
df2['Email'] = df2['Request ID'].map(id_email_map).fillna('')
注意事项

如果运行后所有Email值都为空,大概率是两个DataFrame的Request ID列数据类型不一致导致的(比如一个为整数类型、一个为字符串类型),可先统一类型后再运行匹配逻辑:

# 统一转为字符串类型
df1['Request ID'] = df1['Request ID'].astype(str)
df2['Request ID'] = df2['Request ID'].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:06