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

如何在Pandas中基于另一DataFrame实现查找匹配列?

Pandas Merge出现KeyError及合并逻辑问题

我尝试执行以下代码:

df1 = pd.merge(df1, df2, how="inner", on="UserID")

运行时出现KeyError,同时不确定这种方法是否能得到正确结果,担心它只是简单将第二个DataFrame的数据拼接在第一个旁,而非按UserID匹配对应的Email和Name。


现有df1:

ObjectIDUserIDDescription
Ajh1john123Strawberry1
Basd2katie456Orange1
Chg3sarah789Pumpkin1
Eas1john123Strawberry2
Fjd3sarah789Pumpkin2
Gar2katie456Orange2
Dfd4emilio012Melon1
Ddfd5emilio012Melon2

现有df2:

ObjectIDEmailName
katie456katieATkatieDOTcomKatherine Smith
emilio012emilioATemilioDOTcomEmilio Perez
john123johnATjohnDOTcomJohn Muller
sara789saraATsaraDOTcomSara De La Cruz

期望结果:

Object IDUser IDDescriptionEmailName
Ajh1john123Strawberry1johnATjohnDOTcomJohn Muller
Basd2katie456Orange1katieATkatieDOTcomKatherine Smith
Chg3sarah789Pumpkin1saraATsaraDOTcomSara De La Cruz
Eas1john123Strawberry2johnATjohnDOTcomJohn Muller
Fjd3sarah789Pumpkin2saraATsaraDOTcomSara De La Cruz
Gar2katie456Orange1katieATkatieDOTcomKatherine Smith
Dfd4emilio012Melon1emilioATemilioDOTcomEmilio Perez
Ddfd5emilio012Melon2emilioATemilioDOTcomEmilio Perez

问题解决与说明

1. KeyError原因

你用on="UserID"合并,但df2中没有UserID列——df2里存储用户ID的列是ObjectID,这是报错的直接原因。

2. 正确合并代码

需要指定左右表的匹配列,同时处理拼写差异(df1的sarah789和df2的sara789少了一个h):

# 先修正df1的UserID拼写
df1["UserID"] = df1["UserID"].replace("sarah789", "sara789")

# 按df1.UserID匹配df2.ObjectID,保留df1所有行
df_merged = pd.merge(df1, df2, how="left", left_on="UserID", right_on="ObjectID")

# 清理列并调整名称匹配期望结果
df_merged = df_merged.drop(columns="ObjectID_y")
df_merged = df_merged.rename(columns={
    "ObjectID_x": "Object ID",
    "UserID": "User ID"
})
  • 用how="left"确保df1的所有行都被保留,避免inner合并丢失未匹配的行
  • 拼写修正后,sarah789才能匹配到df2的sara789

3. 合并逻辑说明

Pandas的merge不是简单拼接,它会根据指定的匹配列逐行查找对应值并合并,完全符合你“按UserID查找对应Email和Name”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:07:03