pandas                
            Fusionar, unir y concatenar
        
        
            
    Buscar..
Sintaxis
Marco de datos. fusionar (a la derecha, cómo = 'interno', en = Ninguna, left_on = Ninguna, right_on = Ninguna, left_index = False, right_index = False, sort = False, sufijos = ('_ x', '_y'), copy = True, indicador = falso )
Combine los objetos DataFrame realizando una operación de combinación de estilo de base de datos por columnas o índices.
Si se unen columnas en columnas, los índices de DataFrame se ignorarán. De lo contrario, si se unen índices en índices o índices en una columna o columnas, se pasará el índice.
Parámetros
| Parámetros | Explicación | 
|---|---|
| Correcto | Marco de datos | 
| cómo | {'izquierda', 'derecha', 'exterior', 'interno'}, por defecto 'interno' | 
| dejado en | etiqueta o lista, o como una matriz. Los nombres de los campos para unirse en el marco de datos izquierdo. Puede ser un vector o una lista de vectores de la longitud del DataFrame para usar un vector particular como la clave de unión en lugar de columnas | 
| tocar el asunto exacto | etiqueta o lista, o como una matriz. Nombres de campo para unir en el marco de datos correcto o vector / lista de vectores por documentos left_on | 
| left_index | booleano, por defecto Falso. Utilice el índice del DataFrame izquierdo como la (s) clave (s) de unión. Si es un MultiIndex, el número de claves en el otro DataFrame (ya sea el índice o un número de columnas) debe coincidir con el número de niveles | 
| right_index | booleano, por defecto Falso. Utilice el índice del DataFrame correcto como la clave de unión. Las mismas advertencias que left_index | 
| ordenar | booleano, por defecto Fals. Ordenar las claves de unión lexicográficamente en el resultado DataFrame | 
| sufijos | Secuencia de 2 longitudes (tupla, lista, ...). Sufijo para aplicar a los nombres de columnas superpuestas en el lado izquierdo y derecho, respectivamente | 
| dupdo | booleano, por defecto verdadero. Si es falso, no copie datos innecesariamente | 
| indicador | booleano o cadena, predeterminado Falso. Si es verdadero, agrega una columna para generar el marco de datos llamado "_merge" con información sobre el origen de cada fila. Si es una cadena, la columna con información sobre el origen de cada fila se agregará a DataFrame de salida, y la columna se llamará valor de cadena. La columna de información es de tipo categórico y toma un valor de "left_only" para las observaciones cuya clave de combinación solo aparece en el marco de datos 'izquierdo', 'right_only' para las observaciones cuya clave de combinación solo aparece en el correcto 'DataFrame' y 'ambos' si La clave de combinación de la observación se encuentra en ambos. | 
Unir
Por ejemplo, se dan dos tablas,
T1
id    x        y
8    42        1.9
9    30        1.9
 T2
id    signal
8    55
8    56    
8    59
9    57
9    58    
9    60
 El objetivo es conseguir la nueva tabla T3:
id    x        y        s1        s2        s3
8    42        1.9        55        56        58
9    30        1.9        57        58        60
  Lo que consiste en crear las columnas s1 , s2 y s3 , cada una correspondiente a una fila (el número de filas por id siempre es fijo e igual a 3) 
 Aplicando join (que toma un opcional en el argumento que puede ser una columna o varios nombres de columna, que especifica que el DataFrame pasado se alineará en esa columna en el DataFrame). Así que la solución puede ser como se muestra a continuación: 
df = df1.merge (df2.groupby ('id') ['señal']. apply (lambda x: x.reset_index (drop = True)). unstack (). reset_index ())
df
Out[63]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60
 Si los separo:
df2t = df2.groupby('id')['signal'].apply(lambda x: x.reset_index(drop=True)).unstack().reset_index()
df2t
Out[59]: 
   id   0   1   2
0   8  55  56  59
1   9  57  58  60
df = df1.merge(df2t)
df
Out[61]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60
        Fusionando dos DataFrames
In [1]: df1 = pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']})
In [2]: df2 = pd.DataFrame({'y': ['b', 'c', 'd'], 'z': [4, 5, 6]})
In [3]: df1
Out[3]: 
   x  y
0  1  a
1  2  b
2  3  c   
In [4]: df2
Out[4]: 
   y  z
0  b  4
1  c  5
2  d  6
 Unir internamente:
Utiliza la intersección de claves de dos DataFrames.
In [5]: df1.merge(df2) # by default, it does an inner join on the common column(s)
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5
 Alternativamente, especifique la intersección de claves de dos Dataframes.
In [5]: merged_inner = pd.merge(left=df1, right=df2, left_on='y', right_on='y')
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5
 Unión externa:
Utiliza la unión de las claves de dos DataFrames.
In [6]: df1.merge(df2, how='outer')
Out[6]: 
     x  y    z
0  1.0  a  NaN
1  2.0  b  4.0
2  3.0  c  5.0
3  NaN  d  6.0
 Unirse a la izquierda:
Utiliza solo claves de DataFrame izquierdo.
In [7]: df1.merge(df2, how='left')
Out[7]: 
   x  y    z
0  1  a  NaN
1  2  b  4.0
2  3  c  5.0
 Unirse a la derecha
Utiliza solo claves del DataFrame correcto.
In [8]: df1.merge(df2, how='right')
Out[8]: 
     x  y  z
0  2.0  b  4
1  3.0  c  5
2  NaN  d  6
        Fusionar / concatenar / unir múltiples marcos de datos (horizontal y verticalmente)
generar marcos de datos de muestra:
In [57]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})
In [58]: df1 = pd.DataFrame({'col1':[11,12,13], 'col2': [21,22,23]})
In [59]: df2 = pd.DataFrame({'col1':[111,112,113], 'col2': [121,122,123]})
In [60]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})
In [61]: df1
Out[61]:
   col1  col2
0    11    21
1    12    22
2    13    23
In [62]: df2
Out[62]:
   col1  col2
0   111   121
1   112   122
2   113   123
In [63]: df3
Out[63]:
   col1  col2
0   211   221
1   212   222
2   213   223
 fusionar / unir / concatenar marcos de datos [df1, df2, df3] verticalmente - agregar filas
In [64]: pd.concat([df1,df2,df3], ignore_index=True)
Out[64]:
   col1  col2
0    11    21
1    12    22
2    13    23
3   111   121
4   112   122
5   113   123
6   211   221
7   212   222
8   213   223
 fusionar / unir / concatenar marcos de datos horizontalmente (alineación por índice):
In [65]: pd.concat([df1,df2,df3], axis=1)
Out[65]:
   col1  col2  col1  col2  col1  col2
0    11    21   111   121   211   221
1    12    22   112   122   212   222
2    13    23   113   123   213   223
        Fusionar, Unir y Concat
Fusionar nombres de claves son iguales
pd.merge(df1, df2, on='key')
 Fusionar nombres de claves son diferentes
pd.merge(df1, df2, left_on='l_key', right_on='r_key')
 Diferentes tipos de unión.
pd.merge(df1, df2, on='key', how='left')
 Fusionando en múltiples claves
pd.merge(df1, df2, on=['key1', 'key2'])
 Tratamiento de columnas superpuestas
pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))
 Usando el índice de filas en lugar de combinar claves
pd.merge(df1, df2, right_index=True, left_index=True)
  Evite el uso de la sintaxis .join ya que da una excepción para las columnas superpuestas 
Fusión en el índice de marco de datos izquierdo y la columna de marco de datos derecha
pd.merge(df1, df2, right_index=True, left_on='l_key')
 Marcos de datos concate
Pegado verticalmente
pd.concat([df1, df2, df3], axis=0)
 Pegado horizontalmente
pd.concat([df1, df2, df3], axis=1)
        ¿Cuál es la diferencia entre unirse y fusionarse?
 Considere los marcos de datos de left y right 
left = pd.DataFrame([['a', 1], ['b', 2]], list('XY'), list('AB'))
left
   A  B
X  a  1
Y  b  2
 right = pd.DataFrame([['a', 3], ['b', 4]], list('XY'), list('AC'))
right
   A  C
X  a  3
Y  b  4
  join 
 Piense en join como si quisiera combinarlos a los marcos de datos en función de sus índices respectivos. Si hay columnas superpuestas, join querrá que agregue un sufijo al nombre de la columna superpuesta del marco de datos de la izquierda. Nuestros dos marcos de datos tienen un nombre de columna superpuesto A 
left.join(right, lsuffix='_')
  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4
  Note que el índice se conserva y tenemos 4 columnas. 2 columnas de left y 2 de right . 
Si los índices no se alineaban
left.join(right.reset_index(), lsuffix='_', how='outer')
    A_    B index    A    C
0  NaN  NaN     X    a  3.0
1  NaN  NaN     Y    b  4.0
X    a  1.0   NaN  NaN  NaN
Y    b  2.0   NaN  NaN  NaN
 Utilicé una combinación externa para ilustrar mejor el punto. Si los índices no se alinean, el resultado será la unión de los índices.
 Podemos decirle a join que use una columna específica en el marco de datos de la izquierda para usarla como clave de join, pero seguirá usando el índice de la derecha. 
left.reset_index().join(right, on='index', lsuffix='_')
  index A_  B  A  C
0     X  a  1  a  3
1     Y  b  2  b  4
  merge 
 Piense en la merge como alineación en columnas. Por defecto, la merge buscará columnas superpuestas en las que se fusionará. merge proporciona un mejor control sobre las claves de combinación al permitir al usuario especificar un subconjunto de las columnas superpuestas para usar con el parámetro on , o permitir por separado la especificación de qué columnas de la izquierda y qué columnas de la derecha se fusionan. 
 merge devolverá un marco de datos combinado en el que se destruirá el índice. 
 Este sencillo ejemplo encuentra que la columna superpuesta es 'A' y se combina en función de ella. 
left.merge(right)
   A  B  C
0  a  1  3
1  b  2  4
  Tenga en cuenta que el índice es [0, 1] y ya no es ['X', 'Y'] 
 Puede especificar explícitamente que está fusionando en el índice con la left_index o right_index parametro 
left.merge(right, left_index=True, right_index=True, suffixes=['_', ''])
  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4
  Y esto se ve exactamente como el ejemplo de join anterior.