es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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 y sort_values. Aquí está el código modificado que logra esto:

    df2 = df.groupby(['Color1', 'Color2'], sort=True).sum()[['Value']].reset_index()
    df2 = df2.sort_values(by=['Color1', 'Value'], ascending=[True, False])
    print(df2)
    

    Esto producirá la salida deseada:

      Color1  Color2  Value
    3   Blue  Purple     45
    6   Blue   Brown      5
    1  Green  Yellow     45
    8  Green    Grey     30
    4    Red   White     55
    0    Red    Pink     45
    

    En este código, primero agrupamos por las columnas Color1 y Color2 y calculamos la suma de Value. Luego, restablecemos el índice para que las columnas Color1, Color2 y Value aparezcan. Finalmente, ordenamos el dataframe resultante primero por Color1 (en orden ascendente) y luego por Value (en orden descendente) utilizando el método sort_values.

Comments are closed.