pandas - 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']})
解决方案
我用 修改了第一部分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
推荐阅读
- jboss - [KBase:defaultKieBase]:导入错误:'org.jbpm.demo.itorders.Order'
- javascript - 用于调查的 Javascript
- jquery - 如何编写列模板以在动态生成列的位置有条件地显示和选中复选框
- javascript - 如何使用具有语义保证的 React.memo 或 useMemo?
- markdown - 在 Markdown 帖子中使用全局函数 (nunjucks)
- ios - 错误无法下标“字典”类型的值
' 带有“字符串”类型的索引 - python - 连接类和赋值
- php - PHP 设置日期顺序并获取数据
- angular - Angular 2改变元素数据属性的方法
- alfresco - Alfresco 中的文档关联