2015-06-01 6 views
5

Sono nuovo con i panda e sto provando ad unire due dataframes basati sull'uguaglianza di una colonna specifica. Per esempio supponiamo che ho i seguenti:unire due dataframe panda utilizzando una colonna specifica

df1 
A B C 
1 2 3 
2 2 2 

df2 
A B C 
5 6 7 
2 8 9 

Entrambi dataframes hanno le stesse colonne e il valore di una sola colonna (ad esempio A) potrebbe essere uguale. Quello che voglio come output è questo:

df3 
A B C B C 
2 8 9 2 2 

I valori per la colonna 'A' sono unici in entrambi i dataframes.

Grazie

risposta

4
pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner') 

Se si desidera mantenere la colonna A come un non-indice, quindi:

pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner').reset_index() 
+1

Con questo buon metodo, A diventa l'indice. Questo può essere ciò che l'OP vuole, ma potresti anche offrire l'uso di 'reset_index' per trasformarlo in una colonna, se questo è ciò che desideri. –

+0

Certo, l'indice può essere resettato aggiungendo ".reset_index()" alla fine. 'pd.concat ([df1.set_index ('A'), df2.set_index ('A')], axis = 1, join = 'inner'). Reset_index()' – vk1011

+1

è meglio modificare la risposta a includi l'add'l info –

5

In alternativa, si può solo fare:

df3 = df1.merge(df2, on='A', how='inner', suffixes=('_1', '_2')) 

E poi puoi tenere traccia dell'origine di ciascun valore

+0

Cosa fanno i suffissi? – ahajib

+0

aggiunge un suffisso al nome di ciascuna colonna in modo tale che non resti con es. due colonne chiamate '" B "'. Quando si hanno nomi di colonne duplicati, si ottiene un comportamento molto inaspettato con say, 'df3 ['B']. Apply (lambda x: ...)' dato che now df ['B'] 'è un DataFrame e non una serie . –

+0

Fantastico. Questo in realtà aiuta molto – ahajib