Pandas – cómo guardar atributos en un array y preservar sus valores en nuevas columnas
Tengo un dataframe que tiene los atributos “key”, “name” y “value”. Para cada grupo de “key”, quiero que los atributos “name” se guarden en un array. El valor de cada nombre se guardaría entonces en su propia columna llamada “
key name value
0 A Patton 2
1 A Arthur 2
2 B Will 1
3 B Patton 1
El dataframe anterior debería transformarse de la siguiente manera:
key name Patton_value Arthur_value Will_value
0 A [Patton, Arthur] 2 2 null
1 B [Patton, Will] 1 null 1
Lo que he intentado hasta ahora es:
df.groupby(‘key’).name.apply(list).reset_index()
Pero no sé cómo preservar los valores para el atributo “name” y guardarlos como una columna.
davy.ai
Para obtener el resultado deseado, puedes utilizar una combinación de las funciones
pivot_table
ygroupby
de pandas de la siguiente manera:Desglosemos cada paso:
pd.pivot_table
: Esta función se utiliza para crear una tabla pivote a partir del dataframe original, de manera que cada combinación única dekey
yname
se convierte en una fila separada, y el valor correspondiente es el valor de la celda. Esto da como resultado un dataframe como el siguiente:df.groupby
: Esta función agrupa el dataframe original porkey
y crea una nueva columnaname
que es una lista de todos los valores dename
en cada grupo. Esto da como resultado un dataframe como el siguiente:pd.merge
: Esta función fusiona los dos dataframes creados en los pasos 1 y 2 en base a la columna comúnkey
. Esto garantiza que la listaname
y las columnasvalue
correspondientes estén alineadas para cadakey
único. El dataframe resultante es el siguiente:fillna
: Esta función reemplaza todos los valoresNaN
en el dataframe pornp.nan
para que la salida final sea consistente.df_final.columns
: Esta línea de código renombra las columnas para facilitar la comprensión, de la siguiente manera:Esto nos proporciona el resultado deseado según se especifica en la pregunta.