2015-10-12 14 views
13

Ho il seguente problema: Ho due frame di dati di panda di diversa lunghezza contenenti alcune righe e colonne che hanno valori comuni e alcuni che sono diversi, in questo modo:Unisci due frame di dati di panda Python di lunghezza diversa ma conserva tutte le righe nel frame di dati di output

df1:         df2: 

     Column1 Column2 Column3   ColumnA ColumnB ColumnC 
    0 a  x  x   0 c  y  y 
    1 c  x  x   1 e  z  z 
    2 e  x  x   2 a  s  s 
    3 d  x  x   3 d  f  f 
    4 h  x  x 
    5 k  x  x    

quello che voglio fare ora è fusione dei due dataframes modo che se ColumnA e Column1 hanno lo stesso valore le righe df2 vengono aggiunti alla riga corrispondente df1, in questo modo:

df1: 
    Column1 Column2 Column3 ColumnB ColumnC 
    0 a  x  x  s  s 
    1 c  x  x  y  y 
    2 e  x  x  z  z 
    3 d  x  x  f  f 
    4 h  x  x  NaN  NaN 
    5 k  x  x  NaN  NaN 

So che l'unione è fattibile ugh df1.merge(df2,left_on='Column1', right_on='ColumnA'), ma questo comando elimina tutte le righe che non sono le stesse in Column1 e ColumnA in entrambi i file. Invece di ciò voglio mantenere queste righe in df1 e assegnare loro semplicemente NaN nelle colonne in cui altre righe hanno un valore da df2, come mostrato sopra. C'è un modo semplice per farlo in panda?

Grazie in anticipo!

risposta

14

È possibile leggere la documentazione qui: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

Quello che state cercando è un join sinistro. L'opzione predefinita è un join interno. È possibile modificare questo comportamento passando un argomento di diverso modo:

df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA') 
+0

Penso che in realtà sta cercando 'left' join :) – Mathiou

+0

hai ragione. Modificherò la risposta. – Sina

+0

Leggerò la documentazione, grazie per la risposta veloce! funziona bene. –

3

Si può semplicemente utilizzare fondersi con l'utilizzo su e lista pure

result = df1.merge(df2, on=['Column1']) 

Per ulteriori informazioni seguire link

Problemi correlati