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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow