0Pricing
Pandas & NumPy Academy · Lección

El método agg()

Aplique varias funciones de agregación a la vez con agg() y pase un diccionario para calcular estadísticas distintas en diferentes columnas.

El método agg() es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Por qué usar agg()?

Llamar directamente a sum() o mean() sobre un objeto GroupBy proporciona una sola estadística. Sin embargo, los análisis reales suelen necesitar varias estadísticas a la vez, por ejemplo, los ingresos totales, el tamaño medio de los pedidos y el número de pedidos por región. El método agg() (abreviatura de aggregate) permite calcular todos estos valores en una sola llamada eficiente, en lugar de ejecutar agregaciones por separado y combinar los resultados.

Pasar una lista de nombres de funciones

El uso más sencillo de agg() consiste en pasar una lista de cadenas con nombres de funciones. Pandas aplica cada función a la columna seleccionada y devuelve un DataFrame en el que cada columna corresponde a una función. Este enfoque funciona con cualquier nombre de agregación integrada: 'sum', 'mean', 'min', 'max', 'count', 'std', 'median', entre otros.

import pandas as pd

df = pd.DataFrame({
    'region': ['East', 'West', 'East', 'West', 'East', 'West'],
    'revenue': [200, 340, 150, 290, 310, 410],
    'units':   [20,   35,  15,  30,  28,  40]
})

result = df.groupby('region')['revenue'].agg(['sum', 'mean', 'count', 'max'])
print(result)
#          sum        mean  count  max
# region
# East     660  220.000000      3  310
# West    1040  346.666667      3  410

Cambiar los nombres de las columnas de salida con agregaciones con nombre

Cuando pasa una lista de cadenas, las columnas de salida reciben el nombre de las propias funciones ('sum', 'mean', etc.). Para obtener una salida más clara, use agregaciones con nombre: pase argumentos con nombre donde la clave sea el nombre de columna que desea y el valor sea una tupla de (column, function). Este es el enfoque moderno de Pandas y produce código autoexplicativo.

result = df.groupby('region').agg(
    total_revenue=('revenue', 'sum'),
    avg_revenue=('revenue', 'mean'),
    order_count=('revenue', 'count'),
    max_order=('revenue', 'max')
)
print(result)
#         total_revenue  avg_revenue  order_count  max_order
# region
# East              660   220.000000            3        310
# West             1040   346.666667            3        410

Funciones diferentes para columnas diferentes

Puede pasar un diccionario a agg(), donde cada clave sea un nombre de columna y cada valor sea una función o una lista de funciones que se aplicará a esa columna. Esto le permite calcular, por ejemplo, sum sobre revenue y mean sobre units, todo en una sola llamada a GroupBy.

result = df.groupby('region').agg({
    'revenue': ['sum', 'mean'],
    'units':   ['sum', 'max']
})
print(result)
#        revenue             units
#            sum        mean   sum max
# region
# East       660  220.000000    63  28
# West      1040  346.666667   105  40

MultiIndex de columnas a partir de agg() con un diccionario

Cuando pasa un diccionario con varias funciones por columna, el resultado tiene un MultiIndex en las columnas. El primer nivel es el nombre de la columna original y el segundo, el nombre de la función. Puede aplanar estos nombres de columna en una sola cadena mediante una comprensión de listas, lo que facilita el uso posterior del resultado.

result = df.groupby('region').agg({'revenue': ['sum', 'mean'], 'units': 'sum'})

# Flatten MultiIndex columns
result.columns = ['_'.join(c).strip() for c in result.columns]
print(result.columns.tolist())
# ['revenue_sum', 'revenue_mean', 'units_sum']

Usar funciones personalizadas en agg()

Además de nombres en forma de cadena, puede pasar cualquier objeto invocable de Python a agg(). La función recibe una Series (los valores de esa columna en un grupo) y debe devolver un escalar. Puede pasar una lambda o una función con nombre. Las funciones personalizadas son más flexibles, pero más lentas que las funciones integradas con nombre, porque no pueden utilizar las optimizaciones de nivel C.

def revenue_range(s):
    return s.max() - s.min()

result = df.groupby('region')['revenue'].agg(['sum', revenue_range])
print(result)
#          sum  revenue_range
# region
# East     660            160
# West    1040            120

Agregaciones con nombre y funciones personalizadas

La sintaxis de las agregaciones con nombre también funciona con funciones invocables, no solo con nombres en forma de cadena. Solo tiene que pasar una tupla de (column, function) como valor del argumento con nombre, donde la función sea cualquier objeto invocable que acepte una Series y devuelva un escalar. Esto mantiene la legibilidad del código incluso al combinar funciones integradas con lógica personalizada.

result = df.groupby('region').agg(
    total=('revenue', 'sum'),
    spread=('revenue', lambda s: s.max() - s.min()),
    top_units=('units', 'max')
)
print(result)
#         total  spread  top_units
# region
# East      660     160         28
# West     1040     120         40

Agregar sin seleccionar una columna

Cuando llama a agg() sobre un GroupBy sin seleccionar una columna específica, Pandas aplica la función a todas las columnas numéricas del DataFrame. Es una forma rápida de obtener un resumen de todas las columnas numéricas a la vez. Tenga en cuenta que las columnas con tipos de datos no numéricos se omitirán silenciosamente en la mayoría de las agregaciones.

# Aggregate all numeric columns in one call
result = df.groupby('region').agg(['sum', 'mean'])
print(result)
#        revenue              units
#            sum        mean    sum   mean
# region
# East       660  220.000000     63  21.00
# West      1040  346.666667    105  35.00

Combinar agg() con reset_index()

Después de agg(), las columnas de agrupación son el índice. Un patrón habitual consiste en llamar inmediatamente a reset_index() para obtener un DataFrame plano, en el que las claves de agrupación sean columnas normales. Después puede cambiar el nombre, ordenar y filtrar el resultado como cualquier otro DataFrame, lo que facilita pasarlo a procesos posteriores o exportarlo.

summary = (
    df.groupby('region')
      .agg(total=('revenue', 'sum'), orders=('revenue', 'count'))
      .reset_index()
      .sort_values('total', ascending=False)
)
print(summary)
#   region  total  orders
# 1   West   1040       3
# 0   East    660       3

agg() frente a transform() y apply()

Es importante distinguir tres métodos de GroupBy: agg() reduce cada grupo a un escalar, lo que produce un resultado con menos filas que el original. transform() devuelve un array con la misma forma que la entrada, por lo que puede añadir estadísticas del grupo como nuevas columnas. apply() es el más flexible, pero también el más lento, y se explica en la siguiente lección.

# agg: one row per group
print(df.groupby('region')['revenue'].agg('mean'))
# region
# East    220.0
# West    346.7

# transform: one row per original row (group mean broadcast back)
df['group_mean'] = df.groupby('region')['revenue'].transform('mean')
print(df[['region', 'revenue', 'group_mean']].head())

Ejemplo práctico: resumen de ventas

A continuación se muestra un ejemplo realista de principio a fin: calcular una tabla resumen de ventas con los ingresos totales, el valor medio de los pedidos, el número de pedidos y el intervalo de ingresos por región, con nombres de columna claros y ordenada de forma descendente por los ingresos totales. Este patrón se puede aplicar directamente en flujos de trabajo de análisis de productos, finanzas y marketing.

summary = (
    df.groupby('region')
      .agg(
          total_revenue=('revenue', 'sum'),
          avg_order=('revenue', 'mean'),
          num_orders=('revenue', 'count'),
          revenue_range=('revenue', lambda s: s.max() - s.min())
      )
      .reset_index()
      .sort_values('total_revenue', ascending=False)
      .round(2)
)
print(summary)

Comprobación rápida

Compruebe cuánto ha entendido del método agg() explicado en esta lección.

Resumen de la lección

En esta lección ha aprendido a calcular varias agregaciones a la vez con agg(), a usar agregaciones con nombre para obtener nombres de columna claros y a aplicar funciones diferentes a columnas diferentes mediante un diccionario. A continuación exploraremos transform() y filter(), que incorporan información del grupo al DataFrame original.

Preguntas frecuentes

¿La lección «El método agg()» es gratis?

Sí — el texto completo de «El método agg()» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Qué aprenderé en «El método agg()»?

Aplique varias funciones de agregación a la vez con agg() y pase un diccionario para calcular estadísticas distintas en diferentes columnas. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Pandas & NumPy Academy?

No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «El método agg()»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?

Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El patrón Split-Apply-Combine
  2. GroupBy con una o varias claves
  3. El método agg()
  4. Transform y Filter de GroupBy
← Volver a Pandas & NumPy Academy