Tengo dos dataframes y cada uno tiene dos columnas de índice. Me gustaría combinación de ellos. Por ejemplo, la primera dataframe es la 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

La segunda dataframe es la 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 recibir el 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 intentado un par de versiones mediante el pd.merge y .join métodos, pero nada parece funcionar. ¿Tienes alguna sugerencia?

InformationsquelleAutor km1234 | 2016-04-11

2 Comentarios

  1. 73

    Usted debería ser capaz de utilizar join, el cual se une en el índice como predeterminado. Dado el resultado deseado, usted debe utilizar outer como el tipo de combinació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: _.únete a(otros, en=Ninguno, cómo=’izquierda’, lsuffix=», rsuffix=», sort=False)
    Docstring:
    Columnas de combinación con otros DataFrame, ya sea en el índice o en una tecla
    columna. Eficiente de Unir varios DataFrame objetos por el índice de una vez por
    pasar una lista.

  2. 41

    Usted puede hacer esto con merge:

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

    La palabra clave argumento how='outer' mantiene todos los índices de ambos marcos, completando la falta de índices con NaN. El left_index y right_index palabra clave argumentos tienen la mezcla se realiza en los índices. Si consigues todas las NaN en una columna después de hacer la mezcla, otra solución de problemas paso es verificar que los índices tienen el mismo dtypes.

    La merge código 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
    • Explicaciones útiles y más versátil solución que no sea aceptado. Por supuesto mencionar join() es muy útil también.

Dejar respuesta

Please enter your comment!
Please enter your name here