Pandas: Как сопоставить несколько значений столбца с другим фреймом данных и сгенерировать вывод - PullRequest
2 голосов
/ 04 августа 2020
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' вместе с 'id_imp' из df1. Цель состоит в том, чтобы узнать, какой идентификатор из df1 был сопоставлен. Я выполнил следующие шаги, чтобы получить уникальную комбинацию 'name' и 'county', и тогда я не знаю, как продолжить.

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']})

1 Ответ

0 голосов
/ 04 августа 2020

Я изменил первую часть с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...