pandas uniendo tres vías múltiples marcos de datos en columnas
Tengo 3 archivos CSV. Cada uno tiene la primera columna como los nombres (cadena) de las personas, mientras que todas las demás columnas en cada marco de datos son atributos de esa persona.
¿Cómo puedo "unir" los tres documentos CSV para crear un único CSV en el que cada fila tenga todos los atributos para cada valor único del nombre de cadena de la persona?
La join()
función en pandas especifica que necesito un índice múltiple, pero estoy confundido acerca de qué tiene que ver un esquema de indexación jerárquica con la realización de una combinación basada en un único índice.
La respuesta de Zero es básicamente una reduce
operación. Si tuviera más de un puñado de marcos de datos, los pondría en una lista como esta (generada mediante listas por comprensión o bucles o cualquier otra cosa):
dfs = [df0, df1, df2, ..., dfN]
Suponiendo que tengan una columna común, como name
en su ejemplo, haría lo siguiente:
import functools as ft
df_final = ft.reduce(lambda left, right: pd.merge(left, right, on='name'), dfs)
De esa manera, su código debería funcionar con cualquier cantidad de marcos de datos que desee fusionar.
Podrías probar esto si tienes 3 marcos de datos.
# Merge multiple dataframes
df1 = pd.DataFrame(np.array([
['a', 5, 9],
['b', 4, 61],
['c', 24, 9]]),
columns=['name', 'attr11', 'attr12'])
df2 = pd.DataFrame(np.array([
['a', 5, 19],
['b', 14, 16],
['c', 4, 9]]),
columns=['name', 'attr21', 'attr22'])
df3 = pd.DataFrame(np.array([
['a', 15, 49],
['b', 4, 36],
['c', 14, 9]]),
columns=['name', 'attr31', 'attr32'])
pd.merge(pd.merge(df1,df2,on='name'),df3,on='name')
alternativamente, como lo menciona cwharland
df1.merge(df2,on='name').merge(df3,on='name')