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.

Pandas groupby utilizado con agg no devuelve las columnas clave.

En un proyecto en el que estoy trabajando, me veo obligado/a a utilizar la versión 1.1.5 de Pandas. Estoy intentando realizar una operación de agrupación para agregar una variable mediante múltiples funciones:

import pandas as pd
import numpy as np

df = pd.DataFrame( { 
        "Name" : ["Alice", "Bob", "James", "Mallory", "Bob", "Lucas", "Alice", "Bob", "James", "Mallory", "Bob", "Lucas"] , 
        "Apples" : [22, 31, 35, 41, 27, 32, 64, 12, 59, 45, 65, 31] } )

apple_df = df.groupby('Name', as_index = False).agg(
    apple_avg = ('Apples', np.mean),
    apple_median = ('Apples', np.median),
    apple_count = ('Apples', np.count_nonzero)
)
apple_df

Espero obtener como resultado la columna “Name” junto con las demás variables de agregación de esta forma:

imagen

Sin embargo, obtengo lo siguiente:

imagen

¿Existe algún error conocido y una solución alternativa para este problema?

P.D.
Todo funciona bien con Pandas 1.3.0, pero no puedo utilizarlo en este proyecto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la sintaxis para agrupar múltiples funciones con groupby ha cambiado entre las versiones 1.1.5 y 1.3.0 de pandas. En la versión 1.1.5, la sintaxis para múltiples funciones de agregación debe ser una lista de tuplas:

    apple_df = df.groupby('Name', as_index=False).agg(
        [('apple_avg', 'mean'), ('apple_median', 'median'), ('apple_count', 'count')]
    )
    

    Esto debería dar la salida esperada:

         Name  apple_avg  apple_median  apple_count
    0   Alice       43.0          43.0            2
    1     Bob       35.0          31.0            3
    2   James       47.0          47.0            2
    3   Lucas       32.0          32.0            2
    4  Mallory       43.0          43.0            2
    

    Alternativamente, otra solución sería definir cada función de agregación por separado:

    apple_df = df.groupby('Name', as_index=False).agg(
        apple_avg=('Apples', 'mean'),
        apple_median=('Apples', 'median'),
        apple_count=('Apples', 'count')
    )
    

    Ambas deberían funcionar con la versión 1.1.5 de pandas.

Comments are closed.