2016-04-11 24 views
14

Mam dwie ramki danych i każda ma dwie kolumny indeksów. Chciałbym je połączyć. Na przykład, pierwszy dataframe jest następujący:Łączenie ramek danych w indeksach w PANDAS

     V1 

    A  1/1/2012 12 
      2/1/2012 14 
    B  1/1/2012 15 
      2/1/2012 8 
    C  1/1/2012 17 
      2/1/2012 9 

Drugi dataframe jest następujący:

     V2 

    A  1/1/2012 15 
      3/1/2012 21    
    B  1/1/2012 24 
      2/1/2012 9 
    D  1/1/2012 7 
      2/1/2012 16 

iw wyniku Chciałbym uzyskać następujący:

     V1 V2 

    A  1/1/2012 12 15 
      2/1/2012 14 N/A 
      3/1/2012 N/A 21   
    B  1/1/2012 15 24 
      2/1/2012 8 9 
    C  1/1/2012 7 N/A 
      2/1/2012 16 N/A 
    D  1/1/2012 N/A 7 
      2/1/2012 N/A 16 

I wypróbowałem kilka wersji usig pd.merge i .join, ale nic nie działa. Masz jakieś sugestie? Dziękuję Ci bardzo.

+0

Spróbuj pd.concat ... to powinno działać. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html .. możesz wybrać oś, do której chcesz dołączyć do ramek danych. – Joey

Odpowiedz

18

Powinieneś być w stanie wykorzystać join, która łączy na indeksie jako domyślne. Biorąc pod uwagę pożądany wynik, musisz użyć outer jako typu łączenia.

>>> df1.join(df2, how='outer') 
      V1 V2 
A 1/1/2012 12 15 
    2/1/2012 14 NaN 
    3/1/2012 NaN 21 
B 1/1/2012 15 24 
    2/1/2012 8 9 
C 1/1/2012 17 NaN 
    2/1/2012 9 NaN 
D 1/1/2012 NaN 7 
    2/1/2012 NaN 16 

Podpis: _.join (inne, na = None, jak = 'left', lsuffix = '', rsuffix = '', sort = false) Docstring: Dołącz do kolumn z drugiej DataFrame w kolumnie indeksowej lub kluczowej . Skutecznie dołączaj do wielu obiektów DataFrame według indeksu za jednym razem, przekazując listę przez .

+0

To działa, dziękuję! – km1234

5

Można to zrobić z merge:

df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True) 

Argument kluczowe how='outer' zachowuje wszystkie indeksy z obu ramek, wypełnianie brakujących indeksów z NaN. Argumenty słów kluczowych left_index i right_index muszą zostać scalone z indeksami. Jeśli uzyskasz wszystkie NaN w kolumnie po wykonaniu scalania, kolejnym krokiem rozwiązywania problemów jest sprawdzenie, czy Twoje indeksy mają taką samą wartość dtypes.

Kod merge powyżej produkuje następujące dane wyjściowe dla mnie:

   V1 V2 
A 2012-01-01 12.0 15.0 
    2012-02-01 14.0 NaN 
    2012-03-01 NaN 21.0 
B 2012-01-01 15.0 24.0 
    2012-02-01 8.0 9.0 
C 2012-01-01 17.0 NaN 
    2012-02-01 9.0 NaN 
D 2012-01-01 NaN 7.0 
    2012-02-01 NaN 16.0 
+0

To też działa, dziękuję! – km1234

Powiązane problemy