Fusionando los marcos de datos en un índice con pandas

Tengo dos marcos de datos y cada uno tiene dos columnas de índice. Me gustaría fusionarlos. Por ejemplo, el primer dataframe es el siguiente:

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 

El segundo dataframe es el siguiente:

  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 

y como resultado me gustaría obtener lo siguiente:

  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 

He probado algunas versiones usando los métodos pd.merge y .join , pero nada parece funcionar. ¿Tienes alguna sugerencia?

Debería poder usar join , que se une en el índice de forma predeterminada. Dado el resultado deseado, debe usar outer como el tipo de unión.

 >>> 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 (otro, on = Ninguno, how = ‘left’, lsuffix = ”, rsuffix = ”, sort = False) Cadena documental: une columnas con otro DataFrame ya sea en el índice o en una columna de clave. Unir eficientemente varios objetos DataFrame por índice a la vez al pasar una lista.

Puedes hacer esto con merge :

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

El argumento de palabra clave how='outer' mantiene todos los índices de ambos marcos, completando los índices faltantes con NaN . Los argumentos de las palabras clave left_index y right_index hacen que la fusión se realice en los índices. Si obtiene todos los NaN en una columna después de realizar una fusión, otro paso para solucionar el problema es verificar que sus índices tengan los mismos dtypes .

El código de merge anterior produce la siguiente salida para mí:

  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