Pandas:比较两列并返回匹配的行

Boo*_*d16 3 match vlookup dataframe pandas

我有两个带有多列的数据框。

我想比较 df1['postcode'] 和 df2['pcd'] 并根据这两列的匹配值构建一个新的 df。

注意 - 我要匹配的两列的长度不一样。

df1
  postcode brand
1 znuee    soony 
2 eusjk    nike
3 zieum    addidas
4 psosk    ferrari

df2
  pcd      brand
1 dodkm    soony 
2 eusjk    nike
3 sjksj    addidas
4 psosk    ferrari
Run Code Online (Sandbox Code Playgroud)

输出:

newdf
  pcd      brand
1 eusjk    nike
2 psosk    ferrari
Run Code Online (Sandbox Code Playgroud)

我的尝试,但列上的长度不匹配

newdf = (df2['postcode'] == df1).all(axis=1).astype(int)
Run Code Online (Sandbox Code Playgroud)

我需要使用某种循环功能吗?

EdC*_*ica 8

您可以执行内部merge

In [134]:
df1.merge(df2, left_on=['postcode', 'brand'], right_on=['pcd', 'brand'])

Out[134]:
  postcode    brand    pcd
0    eusjk     nike  eusjk
1    psosk  ferrari  psosk
Run Code Online (Sandbox Code Playgroud)

然后,您可以删除“邮政编码”列或先重命名它:

In [136]:

df1.rename(columns={'postcode':'pcd'}).merge(df2)
Out[136]:
     pcd    brand
0  eusjk     nike
1  psosk  ferrari
Run Code Online (Sandbox Code Playgroud)

  • @Boosted_d16 不要流汗,如果不是食物、金钱或健康,这并不重要。我似乎每隔几周就会收到随机的反对票 (2认同)