0Pricing
Pandas & NumPy Academy · Lección

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))  # DataFrameGroupBy

El 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: int64

El 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    180

Iteració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    220

Funciones 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     1

Agrupació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      340

El 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 faster

GroupBy 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         220

Comprobació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

  1. El patrón Split-Apply-Combine
  2. GroupBy con una o varias claves
  3. El método agg()
  4. Transform y Filter de GroupBy
← Volver a Pandas & NumPy Academy