Agrupar y ordenar en múltiples columnas con Python Pandas
Estaba jugando con la función groupby de pandas, y hay algo que no puedo lograr.
Mis datos son como:
data = ({
'Color1':['Azul', 'Rojo', 'Verde', 'Azul', 'Rojo', 'Verde', 'Azul', 'Rojo', 'Verde'],
'Color2':['Morado', 'Rosa', 'Amarillo', 'Morado', 'Rosa', 'Amarillo', 'Marrón', 'Blanco', 'Gris'],
'Valor':[20, 20, 20, 25, 25, 25, 5, 55, 30]
})
df = pd.DataFrame(data)
Utilicé el groupby para hacer una clasificación (la idea es extraer los mejores N elementos de conjuntos de datos más grandes)
df2 = df.groupby(['Color1'], sort=True).sum()[['Valor']].reset_index()
df2 = df2.sort_values(by=['Valor'], ascending=False)
print(df2)
Color1 Valor
2 Rojo 100
1 Verde 75
0 Azul 50
Pero mi mayor preocupación es cómo agrupar y clasificar agregando Color2 mientras se mantiene el orden en Color1, es decir, un resultado como:
Color1 Color2 Valor
0 Rojo Blanco 55
1 Rojo Rosa 45
2 Verde Amarillo 45
3 Verde Gris 30
4 Azul Morado 45
5 Azul Marrón 5
Muchas gracias por tu ayuda.
davy.ai
Para agrupar y ordenar preservando el orden en Color1 y añadiendo Color2, es necesario pasar ambas columnas a los métodos
groupby
ysort_values
. Aquí está el código modificado que logra esto:Esto producirá la salida deseada:
En este código, primero agrupamos por las columnas
Color1
yColor2
y calculamos la suma deValue
. Luego, restablecemos el índice para que las columnasColor1
,Color2
yValue
aparezcan. Finalmente, ordenamos el dataframe resultante primero porColor1
(en orden ascendente) y luego porValue
(en orden descendente) utilizando el métodosort_values
.