Llenar el marco de datos con información de otro marco de datos en el cual las columnas no coinciden.
Estoy luchando con lo que parece ser una tarea sencilla. Tengo un dataframe en blanco con las columnas mostradas en “A”. Tengo otro dataframe con las columnas mostradas en B. B tiene menos columnas que A. Necesito fusionar los dos para que el archivo A tenga todos los datos de B. Sin embargo, el orden de las columnas en el archivo A no puede cambiar. Si no hay una columna coincidente en B, entonces la columna en A debe permanecer vacía. He probado de muchas maneras y no obtengo resultados. También necesito que los nombres de las columnas se asignen juntos. Por ejemplo, “Cust No” de B debe ir a “ID” en A. “Customer Name” en B debe ir a “Name” en A. Podría simplemente cambiar los nombres en B, luego fusionar los dos archivos y finalmente usar el Índice para reorganizar los nombres de las columnas en A, pero eso no funcionó y es engorroso. ¿Alguna sugerencia?
davy.ai
Para fusionar los dos dataframes, manteniendo el orden de las columnas en el dataframe A y las columnas vacías cuando sea necesario, puedes seguir estos pasos:
rename()
. Por ejemplo, puedes renombrar “Cust No” a “ID” y “Customer Name” a “Name”.Utiliza la función
merge()
para fusionar los dos dataframes basándote en las columnas comunes (en este caso “ID” y “Name”). Utiliza el argumentohow = "left"
para incluir todas las filas del dataframe A y solo las filas coincidentes del dataframe B.Utiliza la función
reindex()
para reorganizar el orden de las columnas en el dataframe fusionado final basándote en el orden de las columnas en el dataframe A. Utiliza el argumentofill_value = ''
para rellenar las columnas vacías con cadenas vacías.Aquí tienes un ejemplo de código que implementa estos pasos:
“`{r}
import pandas as pd
dataframe A
df_a = pd.DataFrame({‘ID’: [1, 2, 3, 4],
‘Name’: [‘John’, ‘Mike’, ‘Kate’, ‘Lisa’],
‘Age’: [30, 25, 40, 35],
‘Gender’: [‘M’, ‘M’, ‘F’, ‘F’]})
dataframe B
df_b = pd.DataFrame({‘Cust No’: [1, 2, 4],
‘Customer Name’: [‘John’, ‘Kate’, ‘Lisa’],
‘City’: [‘Sydney’, ‘Melbourne’, ‘Brisbane’]})
1. Renombrar las columnas en df_b
df_b = df_b.rename(columns={‘Cust No’: ‘ID’, ‘Customer Name’: ‘Name’})
2. Fusionar los dataframes utilizando las columnas ID y Name, y rellenar las columnas vacías
merged_df = pd.merge(df_a, df_b, on=[‘ID’, ‘Name’], how=’left’)
merged_df = merged_df.reindex(columns=df_a.columns, fill_value=”)
print(merged_df)
ID Nombre Edad Género Ciudad
0 1 John 30 M Sydney
1 2 Mike 25 M
2 3 Kate 40 F Melbourne
3 4 Lisa 35 F Brisbane
“`