Programación con Python para Datos · Programación

Filtrado, groupby y agregación

Segmentar datos con filtros, agrupar por categorías y calcular estadísticos agregados con el patrón split-apply-combine.

Filtrado, groupby y agregación

Ilustracion de Python para datos: DataFrame, graficas y arrays de NumPy.
Python para ciencia de datos: NumPy, pandas y manipulacion de datos.

Mapa conceptual

Dividir, aplicar, combinar Groupby es la generalización de la tabla dinámica de una hoja de cálculo: divide los datos en grupos, aplica un cálculo a cada grupo y combina los resultados. Es la operación más rentable de Pandas para responder preguntas de negocio.

Filtrar filas

Filtrar es quedarse con las filas que cumplen una condición, usando máscaras booleanas como en NumPy: df[df.ventas 100]. Se combinan condiciones con y y y paréntesis. También existe df.query(ventas 100), más legible para expresiones largas.

Seleccionar columnas

Antes o después de filtrar, eliges columnas: df[[region, ventas]] te trae solo lo necesario. Filtrar filas y seleccionar columnas suele ser el primer paso de cualquier análisis puntual.

La idea de groupby

Imagina agrupar las ventas por región: todas las filas de una misma región forman un grupo. df.groupby(region) crea el objeto de grupo; sobre él llamas a una función de resumen y Pandas la aplica a cada grupo por separado, devolviendo una fila de resultados por grupo.

Split-apply-combine

Funciones de agregación

Las más comunes son sum, mean, count, min, max y std. df.groupby(region)[ventas].sum() responde «cuánto vendió cada región» en una línea. Se pueden agregar varias columnas a la vez pidiendo un subconjunto antes de agg.

agg: varias funciones

Con .agg([sum, mean, count]) obtienes varios estadísticos por grupo en una sola pasada, y con un diccionario puedes pedir funciones distintas por columna: ventas: sum, cliente: nunique. Es la forma expresiva de construir tablas resumen.

El patrón groupby-agg cubre la mayoría de resúmenes tabulares.
PreguntaExpresión (idea)Resultado
Total por regióndf.groupby(region)[ventas].sum()una fila por región
Media por dos clavesdf.groupby([region, año])...índice multinivel
Recuento distinto.agg(nunique)valor único por grupo
Varias métricas.agg([sum, mean])una columna por métrica

¿Qué hace exactamente df.groupby(region)[ventas].mean()?

Filtrar tras agrupar

A veces quieres quedarte con grupos que cumplen algo: .filter(lambda g: len(g) 5) conserva solo los grupos con suficientes filas. Y con .transform aplicas un cálculo de grupo devolviendo el tamaño original, útil para restar la media de cada grupo fila a fila.

Índices multinivel

Al agrupar por varias columnas, el resultado tiene un índice multinivel (varios niveles). .reset_index() lo convierte de nuevo en columnas normales, facilitando exportar o seguir operando.

value_counts

Para contar categorías rápidas sin un groupby completo, value_counts() da la frecuencia de cada valor ordenada de mayor a menor. Es el resumen de una columna categórica en un gesto.

Ordenar resultados

Un resumen casi siempre se ordena para interpretarse: .sort_values(ventas, ascending=False) muestra primero lo importante. Agrupar, agregar y ordenar es la trinidad de las preguntas de negocio.

Errores frecuentes

Tras agrupar por varias columnas, reset_index() convierte los niveles del índice de nuevo en columnas.

De la pregunta al código

El valor de groupby es traduce preguntas de lenguaje natural a una línea: «media de notas por materia», «total gastado por cliente». Practicar esa traducción es volverte rápido interrogando datos.

Ordena las etapas del patrón split-apply-combine:

Dividir
Aplicar
Combinar
Presentar

Pandas Docs
Guía oficial de groupby y agregación.

Con un DataFrame de transacciones (fecha, cliente, producto, importe), escribe las expresiones para: importe total por cliente, y media de importe por producto y mes. ¿Qué estadístico usarías para saber qué cliente compra artículos más distintos?

Documentacion pandas
Guia de referencia para manipulacion de datos en Python.