El patrón Split-Apply-Combine
Comprenda el flujo conceptual de groupby: dividir el DataFrame en grupos, aplicar una función y combinar los resultados.
El patrón Split-Apply-Combine es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 1 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.
¿Qué es GroupBy?
La operación GroupBy es uno de los patrones más potentes del análisis de datos. Permite dividir un DataFrame en grupos, aplicar una función a cada grupo de forma independiente y combinar después los resultados en una nueva estructura. Este flujo de trabajo se conoce como patrón de dividir-aplicar-combinar, un término acuñado por el estadístico Hadley Wickham.
El paso de división
En el paso de división, Pandas divide el DataFrame en sub-DataFrames según los valores únicos de una o más columnas. Por ejemplo, si los datos tienen una columna region con valores como 'North', 'South' y 'West', el paso de división crea tres grupos independientes. Todavía no se mueve ni se copia ningún dato: Pandas solo registra qué filas pertenecen a cada grupo.
import pandas as pd
df = pd.DataFrame({
'region': ['North', 'South', 'North', 'West', 'South'],
'sales': [200, 150, 300, 180, 220]
})
# split: create a GroupBy object
grouped = df.groupby('region')
print(type(grouped)) # DataFrameGroupByEl paso de aplicación
En el paso de apply, se aplica una función a cada grupo de forma independiente. La función puede ser una agregación integrada, como sum() o mean(), o una función personalizada que defina usted. Las filas de cada grupo se pasan a la función, que devuelve como resultado un escalar, una Series o un DataFrame.
# apply: compute the sum of 'sales' within each region group
total_sales = grouped['sales'].sum()
print(total_sales)
# region
# North 500
# South 370
# West 180
# Name: sales, dtype: int64El paso de combinación
En el paso de combine, Pandas vuelve a reunir automáticamente los resultados de cada grupo en un único objeto, normalmente una Series o un DataFrame. Las claves de los grupos se convierten en el índice del resultado. Este paso se realiza de forma invisible al llamar a un método de agregación sobre un objeto GroupBy, lo que proporciona una tabla de resumen clara con una fila por grupo.
# combine happens automatically — result is a Series indexed by 'region'
print(total_sales.index) # Index(['North', 'South', 'West'])
print(total_sales.values) # [500, 370, 180]Creación de un objeto GroupBy
Puede crear un objeto GroupBy llamando a df.groupby(column). En esta etapa no se calcula nada: es un objeto perezoso. Puede iterar sobre él para ver los grupos o encadenar un método de agregación para activar el cálculo. Pasar as_index=False mantiene la columna de agrupación como una columna normal en lugar de convertirla en el índice del resultado.
grouped = df.groupby('region', as_index=False)
result = grouped['sales'].sum()
print(result)
# region sales
# 0 North 500
# 1 South 370
# 2 West 180Iteración sobre grupos
Puede iterar sobre un objeto GroupBy para inspeccionar cada grupo individualmente. Cada iteración produce una tupla de (group_key, sub_dataframe). Esto resulta útil para depurar o cuando desea procesar cada grupo con código Python arbitrario. Sin embargo, en producción, para obtener un mejor rendimiento, prefiera los métodos de agregación vectorizados a la iteración explícita.
for name, group in df.groupby('region'):
print(f'--- {name} ---')
print(group)
# --- North ---
# region sales
# 0 North 200
# 2 North 300
# --- South ---
# region sales
# 1 South 150
# 4 South 220Funciones de agregación habituales
Pandas GroupBy admite muchas funciones de agregación integradas: sum(), mean(), count(), min(), max(), std(), median(), entre otras. Están muy optimizadas y se ejecutan en todos los grupos en una sola pasada. Siempre debe preferirlas a escribir una función Python personalizada cuando exista una alternativa integrada.
print(df.groupby('region')['sales'].mean())
# region
# North 250.0
# South 185.0
# West 180.0
print(df.groupby('region')['sales'].count())
# region
# North 2
# South 2
# West 1Agrupación simultánea por varias columnas
Puede aplicar agregaciones a varias columnas simultáneamente seleccionándolas antes de llamar al método de agregación, o bien omitir la selección de columnas para agregar todas las columnas numéricas. El resultado es un DataFrame en lugar de una Series, con una columna por cada variable agregada.
df2 = pd.DataFrame({
'region': ['North', 'South', 'North', 'South'],
'units': [10, 8, 12, 9],
'revenue': [200, 160, 240, 180]
})
print(df2.groupby('region').sum())
# units revenue
# region
# North 22 440
# South 17 340El modelo mental de GroupBy
Considere GroupBy como la cláusula GROUP BY de SQL. El código de Pandas df.groupby('region')['sales'].sum() equivale a SELECT region, SUM(sales) FROM df GROUP BY region en SQL. Comprender esta correspondencia le ayuda a pasar de una herramienta a otra y a elegir la abstracción adecuada para su flujo de trabajo.
# Pandas GroupBy is equivalent to SQL GROUP BY
# SQL: SELECT region, SUM(sales) FROM df GROUP BY region
# Pandas: df.groupby('region')['sales'].sum()
result = df.groupby('region')['sales'].sum().reset_index()
result.columns = ['region', 'total_sales']
print(result)¿Por qué no usar un bucle?
Es posible que se pregunte por qué no recorrer simplemente los valores únicos y calcular las estadísticas manualmente. La respuesta es el rendimiento y la legibilidad. Un bucle de Python sobre los grupos es mucho más lento que una única llamada vectorizada a groupby, especialmente con conjuntos de datos grandes. Las operaciones de GroupBy se ejecutan internamente en código C compilado, por lo que son entre 10 y 100 veces más rápidas que los bucles de Python equivalentes.
# Slow approach with a loop
results = {}
for region in df['region'].unique():
subset = df[df['region'] == region]
results[region] = subset['sales'].sum()
# Fast approach with GroupBy
results_fast = df.groupby('region')['sales'].sum().to_dict()
# Both give the same answer, but GroupBy is orders of magnitude fasterGroupBy con varias claves de agrupación
Cuando necesita un nivel de detalle mayor, agrupe por varias columnas pasando una lista a groupby(). El resultado tiene un MultiIndex, donde cada nivel corresponde a una columna de agrupación. Por ejemplo, agrupar por 'region' y 'quarter' proporciona los totales de cada combinación de región y trimestre.
df3 = pd.DataFrame({
'region': ['North', 'North', 'South', 'South'],
'quarter': ['Q1', 'Q2', 'Q1', 'Q2'],
'sales': [200, 300, 150, 220]
})
print(df3.groupby(['region', 'quarter'])['sales'].sum())
# region quarter
# North Q1 200
# Q2 300
# South Q1 150
# Q2 220Comprobación rápida
Compruebe cuánto entiende del patrón dividir-aplicar-combinar explicado en esta lección.
Resumen de la lección
En esta lección ha aprendido: el patrón dividir-aplicar-combinar en el que se basan todas las operaciones de GroupBy, cómo crear un objeto GroupBy con df.groupby() y cómo aplicar agregaciones integradas como sum() y mean() para obtener un resultado por grupo. A continuación, exploraremos la agrupación por una o varias claves con más métodos de agregación.
Preguntas frecuentes
¿La lección «El patrón Split-Apply-Combine» es gratis?
Sí — el texto completo de «El patrón Split-Apply-Combine» 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 patrón Split-Apply-Combine»?
Comprenda el flujo conceptual de groupby: dividir el DataFrame en grupos, aplicar una función y combinar los resultados. 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 1 de 4.
¿Cuánto tiempo toma la lección «El patrón Split-Apply-Combine»?
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
- El patrón Split-Apply-Combine
- GroupBy con una o varias claves
- El método agg()
- Transform y Filter de GroupBy