Tutoriales Interactivos
BlogIniciar sesiónComenzar gratis
Inicio›Blog›Análisis de Datos›Cómo agrupar datos en pandas con groupby

Cómo agrupar datos en pandas con groupby

Una de las operaciones más poderosas en análisis de datos es la agrupación: "¿cuál es el promedio de ventas por región?", "¿cuántos empleados hay por departamento?", "¿qué producto tiene más pedidos por mes?". Para eso existe groupby en pandas.

¿Qué hace groupby?

groupby divide el DataFrame en grupos según los valores de una columna, y luego aplica una función (suma, promedio, conteo) a cada grupo. Es el equivalente de GROUP BY en SQL.

Sintaxis

df.groupby('columna')['columna_a_calcular'].funcion()

Ejemplo base

import pandas as pd

df = pd.DataFrame({
    'empleado': ['Ana', 'Carlos', 'María', 'Luis', 'Sofía'],
    'depto':    ['Tech', 'Ventas', 'Tech', 'Ventas', 'Tech'],
    'salario':  [3000, 2800, 4500, 3200, 3800],
    'ventas':   [0, 15000, 0, 22000, 0]
})

Ejemplo 1: promedio de salario por departamento

promedio = df.groupby('depto')['salario'].mean()
print(promedio)
# depto
# Tech      3766.67
# Ventas    3000.00

Ejemplo 2: múltiples funciones a la vez con agg

resumen = df.groupby('depto')['salario'].agg(['mean', 'min', 'max', 'count'])
print(resumen)
deptomeanminmaxcount
Tech3766.67300045003
Ventas3000.00280032002

Ejemplo 3: agrupar por múltiples columnas

df['nivel'] = ['Senior', 'Junior', 'Senior', 'Junior', 'Mid']

resultado = df.groupby(['depto', 'nivel'])['salario'].mean()
print(resultado)

Ejemplo 4: conteo de registros por grupo

conteo = df.groupby('depto').size()
print(conteo)
# Tech      3
# Ventas    2

size() cuenta las filas en cada grupo, incluyendo NaN. count() cuenta solo los valores no nulos.

Agrupar y resetear el índice

Por defecto, groupby convierte la columna agrupada en índice. Para mantenerla como columna:

resultado = df.groupby('depto')['salario'].mean().reset_index()
print(resultado)
# depto  salario
# Tech   3766.67
# Ventas 3000.00

Ejemplo real: ventas mensuales

ventas = pd.read_csv('ventas.csv', parse_dates=['fecha'])
ventas['mes'] = ventas['fecha'].dt.to_period('M')

total_mensual = ventas.groupby('mes')['monto'].sum().reset_index()
print(total_mensual)

Errores frecuentes

Olvidar que groupby devuelve un objeto GroupBy: df.groupby('col') por sí solo no devuelve datos útiles — debes aplicar una función como .mean(), .sum(), .count(), etc.

Confundir count() y size(): size() cuenta todas las filas del grupo (incluidos NaN). count() cuenta solo valores no nulos. Para saber cuántos registros hay por grupo, usa size().

No resetear el índice: si usas el resultado para visualizarlo o unirlo con otro DataFrame, el índice agrupado puede causar problemas. Usa .reset_index().

Aprende haciendo, no solo leyendo

Leer es el primer paso. El verdadero aprendizaje ocurre cuando practicas con ejercicios reales de SQL y recibes corrección inmediata de IA.

Comenzar gratis →
Desafío Latam
+56 9 5117 7975
+52 1 55 4047 7251
[email protected]

Carreras

  • Full Stack JavaScript
  • Diseño UX/UI
  • Data Science
  • Data Analytics

Comunidad

  • Blog
  • Becas
  • Trabaja con Nosotros
  • Políticas de Calidad

Síguenos

© 2026 Desafío Latam. Todos los derechos reservados.