首页 > 解决方案 > Pandas:如何将多列值与另一个数据框匹配并生成输出

问题描述

df1 = pd.DataFrame({'id_imp': ['a', 'b', 'c','d','e','f','g'], 
   'name': ['jon', 'jon', 'tom', 'ber', 'gary','gary', 'zul'],
   'state' : ['ca', 'ny', 'tn','ca','tn','tn','il'],
   'county': ['wood','wood','fair','bridge','rosewelt','rosewelt','lili']})

df2 = pd.DataFrame({'id_sal': ['h', 'i', 'j','k','l'], 
   'name': ['jon', 'zolie', 'tom', 'ber', 'gary'],
   'state' : ['ca', 'ch', 'tn','ca','tn'],
   'county': ['wood','plas','fair','bridge','rosewelt']})

我有两个数据框,我想仅根据“名称”和“县”将 df2 与 df1 匹配。最终输出应具有基于 'name' 和 'county' 的公共行以及来自 df1 的 'id_imp'。目标是知道 df1 中的哪个 id 已匹配。我按照以下步骤获得了“名称”和“县”的唯一组合,然后我不知道如何进一步进行。

new = df1.groupby(['name','county']).size().reset_index().rename(columns={0:'count'})

最终的预期输出是

final = pd.DataFrame({'id_sal': ['h', 'j', 'k','l'], 
   'name': ['jon', 'tom', 'ber', 'gary'],
   'state' : ['ca', 'tn','ca','tn'],
   'county': ['wood','fair','bridge','rosewelt'],
   'id_imp': ['a','c','d','f']})

标签: pandaspandas-groupby

解决方案


我用 修改了第一部分drop_duplicates,然后做merge

final=df2.merge(df1.drop_duplicates(['name','county']).drop('state',1), how='left',indicator=True, on=['name','county'])
final=final[final['_merge']=='both'].drop('_merge',1)
final
Out[12]: 
  id_sal  name state    county id_imp
0      h   jon    ca      wood      a
2      j   tom    tn      fair      c
3      k   ber    ca    bridge      d
4      l  gary    tn  rosewelt      e

推荐阅读