2015-10-12 26 views
13

Mam następujący problem: Mam dwie ramki danych o różnych długościach, zawierające niektóre wiersze i kolumny, które mają wspólne wartości, a inne są różne, tak:Scal dwie ramki danych Panda Panda o różnej długości, ale zachowaj wszystkie wiersze w ramce danych wyjściowych

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    

Co chcę zrobić teraz jest łączenie dwóch dataframes tak, że jeśli Columna i Kolumna1 mają taką samą wartość wiersze z DF2 są dołączane do odpowiedniego wiersza w DF1 coś takiego:

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 

Wiem, że połączenie jest wykonalne ugh df1.merge(df2,left_on='Column1', right_on='ColumnA'), ale to polecenie usuwa wszystkie wiersze, które nie są takie same w Kolumnie 1 i Kolumnie A w obu plikach. Zamiast tego chcę zachować te wiersze w df1 i po prostu przypisać NaN do nich w kolumnach, gdzie inne wiersze mają wartość od df2, jak pokazano powyżej. Czy jest to płynny sposób na pandy?

Z góry dziękuję!

Odpowiedz

14

można przeczytać dokumentację tutaj: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

Co szukasz jest po lewej przyłączyć. Opcją domyślną jest sprzężenie wewnętrzne. Możesz zmienić to zachowanie, przekazując inny argument:

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

Myślę, że on faktycznie szuka "lewej" dołączyć :) – Mathiou

+0

masz rację. Będę edytować odpowiedź. – Sina

+0

Przeczytam dokumentację, dziękuję za szybką odpowiedź! działa w porządku. –

3

można po prostu użyć połączyć się z użyciem na i lista oraz

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

Aby uzyskać więcej informacji, wykonaj link