Pandas & NumPy Academy · Aula

O padrão Dividir-Aplicar-Combinar

Entenda o fluxo conceitual de groupby: dividir o DataFrame em grupos, aplicar uma função e combinar os resultados.

Aula 1 de 413 etapas

O padrão Dividir-Aplicar-Combinar é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que é GroupBy?

A operação GroupBy é um dos padrões mais poderosos da análise de dados. Ela permite dividir um DataFrame em grupos, aplicar uma função a cada grupo de forma independente e, em seguida, combinar os resultados em uma nova estrutura. Esse fluxo de trabalho é conhecido como padrão dividir-aplicar-combinar, termo criado pelo estatístico Hadley Wickham.

A etapa de divisão

Na etapa de divisão, o Pandas divide o DataFrame em sub-DataFrames com base nos valores exclusivos de uma ou mais colunas. Por exemplo, se seus dados tiverem uma coluna region com valores como 'North', 'South' e 'West', essa etapa criará três grupos separados. Nenhum dado é movido ou copiado ainda — o Pandas apenas registra quais linhas pertencem 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

A etapa de aplicação

Na etapa de aplicação, uma função é aplicada a cada grupo de forma independente. A função pode ser uma agregação integrada, como sum() ou mean(), ou uma função personalizada definida por você. As linhas de cada grupo são passadas para a função, que retorna um escalar, uma Series ou um DataFrame como resultado.

# 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

A etapa de combinação

Na etapa de combinação, o Pandas reúne automaticamente os resultados de cada grupo em um único objeto — normalmente uma Series ou um DataFrame. As chaves dos grupos tornam-se o índice do resultado. Essa etapa ocorre de forma invisível quando você chama um método de agregação em um objeto GroupBy, fornecendo uma tabela de resumo organizada com uma linha 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]

Criando um objeto GroupBy

Você cria um objeto GroupBy chamando df.groupby(column). Nada é calculado nessa etapa — trata-se de um objeto avaliado sob demanda. Você pode iterar sobre ele para ver os grupos ou encadear um método de agregação para iniciar o cálculo. Passar as_index=False mantém a coluna de agrupamento como uma coluna comum, em vez de transformá-la no índice do 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

Iterando sobre grupos

Você pode iterar sobre um objeto GroupBy para inspecionar cada grupo individualmente. Cada iteração produz uma tupla de (group_key, sub_dataframe). Isso é útil para depuração ou quando você quer processar cada grupo com código Python arbitrário. No entanto, para obter melhor desempenho em produção, prefira métodos de agregação vetorizados à iteração 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

Funções de agregação comuns

O Pandas GroupBy oferece várias funções de agregação integradas: sum(), mean(), count(), min(), max(), std(), median() e outras. Elas são altamente otimizadas e executadas em todos os grupos em uma única passagem. Sempre prefira essas funções a escrever uma função Python personalizada quando houver uma opção 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

Agrupando várias colunas de uma vez

Você pode aplicar agregações a várias colunas simultaneamente selecionando-as antes de chamar o método de agregação ou omitindo a seleção de colunas para agregar todas as colunas numéricas. O resultado é um DataFrame, em vez de uma Series, com uma coluna para cada variável 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

O modelo mental do GroupBy

Considere o GroupBy como a cláusula GROUP BY do SQL. O código do Pandas df.groupby('region')['sales'].sum() equivale a SELECT region, SUM(sales) FROM df GROUP BY region em SQL. Entender essa correspondência ajuda você a alternar entre as duas ferramentas e escolher a abstração adequada para seu fluxo de processamento.

# 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 que não usar um laço?

Você pode se perguntar por que não percorrer simplesmente os valores exclusivos e calcular as estatísticas manualmente. A resposta é desempenho e legibilidade. Um laço Python sobre grupos é muito mais lento do que uma única chamada vetorizada de groupby, especialmente com grandes conjuntos de dados. As operações GroupBy são executadas internamente em código C compilado, o que as torna de 10 a 100 vezes mais rápidas do que laços 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 com várias chaves de agrupamento

Quando você precisa de uma granularidade maior, agrupe por várias colunas passando uma lista para groupby(). O resultado tem um MultiIndex em que cada nível corresponde a uma coluna de agrupamento. Por exemplo, agrupar por 'region' e 'quarter' fornece os totais para cada combinação de região e 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

Verificação rápida

Teste sua compreensão do padrão dividir-aplicar-combinar apresentado nesta lição.

Resumo da lição

Nesta lição, você aprendeu: o padrão dividir-aplicar-combinar, que fundamenta todas as operações GroupBy; como criar um objeto GroupBy com df.groupby(); e como aplicar agregações integradas, como sum() e mean(), para obter um resultado por grupo. A seguir, exploraremos o agrupamento por uma ou várias chaves com mais métodos de agregação.

Grátis para começar

Aprenda Python com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “O padrão Dividir-Aplicar-Combinar” é grátis?

Sim — o texto completo de “O padrão Dividir-Aplicar-Combinar” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que vou aprender em “O padrão Dividir-Aplicar-Combinar”?

Entenda o fluxo conceitual de groupby: dividir o DataFrame em grupos, aplicar uma função e combinar os resultados. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Pandas & NumPy Academy?

Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “O padrão Dividir-Aplicar-Combinar”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Pandas & NumPy Academy?

Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O padrão Dividir-Aplicar-Combinar
  2. GroupBy com uma ou várias chaves
  3. O método agg()
  4. Transformação e filtragem com GroupBy
← Voltar para Pandas & NumPy Academy