Concatenar DataFrames por filas o columnas con etiquetas repetidas¶

Qué pasa si quiero unir por filas dos DataFrames que tienen etiquetas de filas repetidas?

In [1]:
# Preliminares
import pandas as pd
import numpy as np

Consideramos los dos DataFrames:

In [2]:
df1 = pd.DataFrame(np.arange(9).reshape(3, 3), index=list('ijk'), columns=list('abc'))
df1
Out[2]:
a b c
i 0 1 2
j 3 4 5
k 6 7 8
In [3]:
df4 = pd.DataFrame(np.arange(40,46).reshape(2, 3), index=list('ij'), columns=list('abc'))
df4
Out[3]:
a b c
i 40 41 42
j 43 44 45

df1 y df4 tienen las mismas columnas, pero además se repiten sus etiquetas de filas

Unimos df1 y df4 por filas:

In [4]:
pd.concat([df1, df4])
Out[4]:
a b c
i 0 1 2
j 3 4 5
k 6 7 8
i 40 41 42
j 43 44 45

Se repiten las etiquetas en el resultado.

Si no queremos que se repitan las etiquetas¶

Tenemos dos opciones:

  1. Descartar las etiquetas de las filas con ignore_index=True
  2. Indicar con keys claves que informen de qué DataFrame procede cada fila

Descartando las etiquetas¶

In [5]:
pd.concat([df1, df4], ignore_index=True)
Out[5]:
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 40 41 42
4 43 44 45

Indicando la procedencia de cada fila con keys¶

In [6]:
pd.concat([df1, df4], keys=['df1', 'df4'])
Out[6]:
a b c
df1 i 0 1 2
j 3 4 5
k 6 7 8
df4 i 40 41 42
j 43 44 45