2016-04-11 21 views
14

Ho due frame di dati e ognuno ha due colonne di indice. Mi piacerebbe unirli Ad esempio, il primo dataframe è la seguente:Fusione di frame di dati sugli indici in 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 

Il secondo dataframe è la seguente:

     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 

ed in conseguenza desidero ottenere le seguenti:

     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 ho provato alcune versioni di usig pd.merge e .join, ma niente sembra funzionare. Hai qualche suggerimento? Grazie mille.

+0

Prova pd.concat ... questo dovrebbe funzionare. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html .. puoi selezionare l'asse al quale vorresti unirti ai dataframes. – Joey

risposta

18

Si dovrebbe essere in grado di utilizzare join, che unisce l'indice di default. Dato il risultato desiderato, è necessario utilizzare outer come tipo di join.

>>> 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 

Firma: _.join (dall'altra, sulla = Nessuno, come = 'left', lsuffix = '', rsuffix = '', una sorta = False) docstring: registrazione colonne con altre dataframe o su indice o su una chiave colonna. Unisciti in modo efficiente a più oggetti DataFrame per indice in una sola volta tramite passando un elenco.

+0

Funziona, grazie! – km1234

5

Si può fare questo con merge:

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

L'argomento chiave how='outer' mantiene tutti gli indici di entrambe le cornici, compilando gli indici mancante con NaN. Gli argomenti delle parole chiave left_index e right_index devono essere uniti negli indici. Se si ottiene tutto il NaN in una colonna dopo aver eseguito un'unione, un'altra fase di risoluzione dei problemi consiste nel verificare che gli indici abbiano lo stesso dtypes.

Il codice merge sopra produce il seguente output per me:

   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

Anche questo funziona, grazie! – km1234

Problemi correlati