(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo agrupar datos con groupby en pandas: paso a paso

João Barros 05 de July de 2026 4 min de lectura

Agrupar datos con groupby de pandas es una de las tareas más útiles en Python para el análisis de datos: resume miles de filas en resultados por categoría y responde a preguntas como "¿cuáles son los ingresos por región?" o "¿cuántas ventas hubo por producto?". En lugar de filtrar categoría por categoría a mano, groupby hace ese trabajo de una sola vez, con código corto y legible. A continuación tienes un ejemplo práctico, del caso más simple al resumen completo, para dominar groupby y la agregación de datos.

Requisitos previos

  • Python 3 instalado en tu ordenador.
  • La biblioteca pandas instalada (pip install pandas).
  • Nociones básicas de DataFrames: una tabla con filas y columnas.

Paso 1: Preparar los datos de ejemplo

Para que veas groupby funcionando sin depender de archivos externos, empezamos creando un DataFrame pequeño de ventas. Cada fila es una venta y tiene cuatro columnas: la region, el product, las units vendidas y la revenue (ingresos).

import pandas as pd

sales = pd.DataFrame({
    "region":  ["North", "North", "South", "South", "Center", "North"],
    "product": ["A", "B", "A", "B", "A", "A"],
    "units":   [10, 5, 8, 12, 7, 3],
    "revenue": [100, 75, 80, 180, 70, 30],
})

Paso 2: Agrupar por una columna y sumar

El patrón de groupby se llama "split-apply-combine" (dividir, aplicar, combinar): pandas divide las filas por cada valor de la columna elegida, aplica una función a cada grupo (aquí, la suma) y combina los resultados en una única estructura. Para obtener los ingresos por región, agrupamos por region, seleccionamos la columna revenue y aplicamos sum():

revenue_by_region = sales.groupby("region")["revenue"].sum()
print(revenue_by_region)

El resultado es una Series cuyo índice pasa a ser la región: Center suma 70, North suma 205 y South suma 260. Fíjate en que la columna por la que agrupamos deja de ser una columna normal y se convierte en el índice del resultado.

Paso 3: Aplicar varias agregaciones con agg()

En la práctica casi siempre queremos más de una métrica. Con el método agg() y el estilo named aggregation damos un nombre a cada resultado e indicamos, para cada uno, la columna y la función que se aplica. Así obtenemos varias columnas de resumen de una sola vez, ya con nombres claros:

summary = sales.groupby("region").agg(
    total_revenue=("revenue", "sum"),
    avg_units=("units", "mean"),
    n_sales=("revenue", "count"),
)
print(summary)

Cada fila del resultado es una región y cada columna es una métrica: los ingresos totales, la media de unidades (mean) y el número de ventas (count). Otras funciones muy usadas son min, max, median, std y nunique (valores distintos).

Paso 4: Agrupar por varias columnas

Podemos agrupar por más de una columna pasando una lista a groupby. Para obtener los ingresos por región y por producto, agrupamos por ambas:

by_region_product = (
    sales.groupby(["region", "product"])["revenue"].sum().reset_index()
)
print(by_region_product)

Ahora el resultado tiene una fila por cada combinación de región y producto. Al agrupar por varias columnas, pandas crea un índice compuesto (MultiIndex); reset_index() convierte ese índice en columnas normales y devuelve un DataFrame limpio, listo para usar en un gráfico o exportar a un archivo.

Verificar el resultado

Una forma sencilla de confirmar que la agrupación es correcta es comparar la suma de todos los grupos con la suma de la columna original. Si los dos valores difieren, algo salió mal; por ejemplo, valores faltantes (NaN) que no se contaron:

print(revenue_by_region.sum())   # 535
print(sales["revenue"].sum())    # 535

Los dos valores coinciden (535), por lo que groupby no perdió ni duplicó filas. Para leer el resultado más rápido, puedes ordenarlo con revenue_by_region.sort_values(ascending=False) y ver primero las regiones con mayores ingresos.

Conclusión

Con groupby pasaste de una tabla de filas sueltas a respuestas claras por categoría, la base de casi todo el análisis de datos en pandas. A partir de aquí, dos pasos naturales son combinar groupby con merge para cruzar información de varias tablas y crear una tabla dinámica con pivot_table. ¿Cuál será la primera pregunta que responderás a tus datos con un groupby?