Создайте попарный фрейм данных, который соответствует более чем двум столбцам - PullRequest
1 голос
/ 18 июня 2020

В настоящее время я использую следующий код для сопоставления каждого значения в одном столбце кадра данных с каждым значением в другом столбце кадра данных:

new_df = pd.DataFrame(product(df1['CompanyA'], df2['CompanyB']), columns=["CompanyA","CompanyB"]) 

new_df_address1 = pd.DataFrame(product(df1['Address1A'], df2['Address1B']), columns=["Address1A","Address1B"]) 

new_df_postcode = pd.DataFrame(product(df1['PostcodeA'], df2['PostcodeB']), columns=["PostcodeA","PostcodeB"]) 

(and a few more pairs with the same code)
* 1003 CompanyB также переносится через Address1A, Address 1B, PostcodeA, PostcodeB и т. Д. c. для создания одного фрейма данных, содержащего всю информацию.

Я бы хотел избежать вычисления каждого по отдельности и добавления их друг к другу на случай, если между вычислениями есть некоторая путаница.

Спасибо!

РЕДАКТИРОВАТЬ: образец данных

df1:
CompanyA      Address1A        Address2A   PostcodeA ...
Trees inc.    1 Hill Street    London      FH5 8YB

df2:

CompanyB      Address1B        Address2B   PostcodeB ...
Boxes inc.    4 High Street    York        AK5 FJ6
Hats inc.     17 River Lane    Bolton      YT5 9NB

парный df:

CompanyA      Address1A        Address2A   PostcodeA  CompanyB      Address1B        Address2B   PostcodeB ...
Trees inc.    1 Hill Street    London      FH5 8YB    Boxes inc.    4 High Street    York        AK5 FJ6
Trees inc.    1 Hill Street    London      FH5 8YB    Hats inc.     17 River Lane    Bolton      YT5 9NB 
etc

Желаемый результат - каждая строка в df1 сопоставлен с каждой строкой в ​​df2.

Спасибо!

1 Ответ

1 голос
/ 18 июня 2020

IIU C, вам нужно сделать декартово произведение ваших фреймов данных только на ваших правых клавишах.

df = pd.merge(df1.assign(key="var1"), df2.assign(key="var1"), on="key", how="right").drop(
    "key", 1
)

print(df)

     CompanyA      Address1A Address2A PostcodeA    CompanyB      Address1B  \
0  Trees inc.  1 Hill Street    London   FH5 8YB  Boxes inc.  4 High Street   
1  Trees inc.  1 Hill Street    London   FH5 8YB   Hats inc.  17 River Lane   

  Address2B PostcodeB  
0      York   AK5 FJ6  
1    Bolton   YT5 9NB  
...