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.
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)) # DataFrameGroupByA 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: int64A 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 180Iterando 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 220Funçõ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 1Agrupando 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 340O 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 fasterGroupBy 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 220Verificaçã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.
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
- O padrão Dividir-Aplicar-Combinar
- GroupBy com uma ou várias chaves
- O método agg()
- Transformação e filtragem com GroupBy