Panda’s: samenvoegen (Join) Twee datakaders op meerdere kolommen

Ik probeer deel te nemen aan twee panda’s data-frames met behulp van twee kolommen:

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

maar kreeg de volgende fout:

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'

Enig idee wat moet de juiste manier zijn om dit te doen? Bedankt!


Antwoord 1, Autoriteit 100%

Probeer dit

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

https: //pandas.pydata. Org / Panda’s-Docs / Stable / Reference / Api / Pandas.Dataframe.Merge.html

Left_on: label of lijst, of array-achtige veldnamen om aan de linkerkant aan te sluiten
Dataframe. Kan een vector of lijst zijn van vectoren van de lengte van de
Dataframe om een ​​bepaalde vector te gebruiken als de toets Join in plaats van
kolommen

Right_on: label of lijst, of array-achtige veldnamen om mee te doen
in de juiste dataframe of vector / lijst van vectoren per linkse documenten


Antwoord 2, Autoriteit 2%

het probleem hier is dat je door de apostrofs te gebruiken de waarde instelt als een tekenreeks, terwijl in feite, zoals @Shijo uit de documentatie aangeeft, de functie een label of lijst verwacht, maar geen tekenreeks! Als de lijst elk van de namen van de kolommen bevat die worden doorgegeven voor zowel het linker als het rechter dataframe, dan moet elke kolomnaam moetafzonderlijk tussen apostrofs staan. Met wat is gezegd, kunnen we begrijpen waarom dit onjuist is:

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

En dit is de juiste manier om de functie te gebruiken:

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

Antwoord 3, autoriteit 2%

Een andere manier om dit te doen:
new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')

Other episodes