Pandas 熊猫:如何将多个列值与另一个数据帧匹配并生成输出
我有两个数据帧,我想只根据“名称”和“县”匹配df2和df1。最终输出应该具有基于“name”和“county”以及来自df1的“id_imp”的公共行。目的是了解已匹配df1中的哪个id。我按照下面的步骤来获得“name”和“country”的唯一组合,然后我不知道如何进一步操作Pandas 熊猫:如何将多个列值与另一个数据帧匹配并生成输出,pandas,pandas-groupby,Pandas,Pandas Groupby,我有两个数据帧,我想只根据“名称”和“县”匹配df2和df1。最终输出应该具有基于“name”和“county”以及来自df1的“id_imp”的公共行。目的是了解已匹配df1中的哪个id。我按照下面的步骤来获得“name”和“country”的唯一组合,然后我不知道如何进一步操作 df1 = pd.DataFrame({'id_imp': ['a', 'b', 'c','d','e','f','g'], 'name': ['jon', 'jon', 'tom', 'ber', 'gar
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']})
最终预期输出为
new = df1.groupby(['name','county']).size().reset_index().rename(columns={0:'count'})
我用
drop\u duplicates
修改了第一部分,然后执行merge
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中的1是什么吗?@Mike drop额外的列~1这里是column~在实际问题中,我有40列,只有7列用于过滤条件。那么如何管理这个语句中的剩余列,drop('state',1)@mikedrop(['c1','c2','c3','state'],1)
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