Lección 11 de 29•Módulo 2: Pandas - Manipulación de Datos
11. Agrupación y Agregación
GroupBy, pivot tables y agregaciones complejas
25 minutos
Domina GroupBy, pivot tables y agregaciones complejas para generar insights profundos de tus datos.
GroupBy avanzado
import pandas as pd
import numpy as np
# Dataset de ventas complejo
ventas = pd.DataFrame({
'fecha': pd.date_range('2024-01-01', periods=500, freq='H'),
'producto': np.random.choice(['Laptop', 'Mouse', 'Teclado', 'Monitor'], 500),
'categoria': np.random.choice(['Computadoras', 'Accesorios', 'Monitores'], 500),
'region': np.random.choice(['Norte', 'Sur', 'Este', 'Oeste'], 500),
'vendedor': np.random.choice(['Ana', 'Carlos', 'María', 'Luis'], 500),
'cantidad': np.random.randint(1, 10, 500),
'precio': np.random.choice([25, 60, 300, 800], 500)
})
ventas['total'] = ventas['cantidad'] * ventas['precio']
# Agregación múltiple
resumen = ventas.groupby('producto').agg({
'total': ['sum', 'mean', 'count', 'std'],
'cantidad': ['sum', 'mean'],
'precio': ['mean', 'min', 'max']
}).round(2)
print(resumen)
# GroupBy con funciones personalizadas
def rango(serie):
return serie.max() - serie.min()
custom_agg = ventas.groupby('producto')['total'].agg([
('total', 'sum'),
('promedio', 'mean'),
('rango', rango),
('transacciones', 'count')
])
print(custom_agg)
# Multiple groupby
por_region_producto = ventas.groupby(['region', 'producto'])['total'].sum().unstack(fill_value=0)
print(por_region_producto)
Pivot Tables avanzadas
# Pivot table completa
pivot = ventas.pivot_table(
values='total',
index='region',
columns='producto',
aggfunc='sum',
margins=True, # Totales
margins_name='TOTAL',
fill_value=0
)
print(pivot)
# Múltiples valores
pivot_multi = ventas.pivot_table(
values=['total', 'cantidad'],
index='region',
columns='producto',
aggfunc={'total': 'sum', 'cantidad': 'mean'}
)
# Múltiples funciones de agregación
pivot_funciones = ventas.pivot_table(
values='total',
index='region',
columns='producto',
aggfunc=['sum', 'mean', 'count']
)
Transformaciones por grupo
# Calcular porcentaje del total por grupo
ventas['pct_del_total_producto'] = ventas.groupby('producto')['total'].transform(
lambda x: (x / x.sum()) * 100
)
# Ranking dentro de cada grupo
ventas['rank_en_region'] = ventas.groupby('region')['total'].rank(ascending=False)
# Diferencia con la media del grupo
ventas['diff_vs_media'] = ventas.groupby('producto')['total'].transform(
lambda x: x - x.mean()
)
# Acumulado por grupo
ventas_ordenadas = ventas.sort_values(['producto', 'fecha'])
ventas_ordenadas['acumulado_producto'] = ventas_ordenadas.groupby('producto')['total'].cumsum()
Resumen de la lección
✅ groupby().agg() permite múltiples agregaciones simultáneas ✅ pivot_table() crea tablas dinámicas como Excel ✅ transform() aplica función manteniendo la forma original ✅ Agregaciones personalizadas con funciones lambda o definidas ✅ unstack() convierte índices en columnas
🎯 Próxima lección: 12. Introducción a Matplotlib
¡Completaste el módulo de Pandas! Ahora comenzarás con visualización de datos. 🚀
¿Completaste esta lección?
Marca esta lección como completada. Tu progreso se guardará en tu navegador.