(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como agrupar dados com groupby em pandas: passo a passo

João Barros 05 de July de 2026 4 min de leitura

Agrupar dados com o groupby do pandas é uma das tarefas mais úteis em Python para análise de dados: resume milhares de linhas em resultados por categoria e responde a perguntas como "qual é a receita por região?" ou "quantas vendas houve por produto?". Em vez de filtrar manualmente categoria a categoria, o groupby faz esse trabalho de uma só vez, com código curto e legível. A seguir tens um exemplo prático, do caso mais simples ao resumo completo, para dominares o groupby e a agregação de dados.

Pré-requisitos

  • Python 3 instalado no teu computador.
  • A biblioteca pandas instalada (pip install pandas).
  • Noções básicas de DataFrames: uma tabela com linhas e colunas.

Passo 1: Preparar os dados de exemplo

Para veres o groupby a funcionar sem depender de ficheiros externos, começamos por criar um DataFrame pequeno com vendas. Cada linha é uma venda e tem quatro colunas: a region (região), o product (produto), as units (unidades vendidas) e a revenue (receita).

import pandas as pd

sales = pd.DataFrame({
    "region":  ["North", "North", "South", "South", "Center", "North"],
    "product": ["A", "B", "A", "B", "A", "A"],
    "units":   [10, 5, 8, 12, 7, 3],
    "revenue": [100, 75, 80, 180, 70, 30],
})

Passo 2: Agrupar por uma coluna e somar

O padrão do groupby chama-se "dividir, aplicar, combinar" (split-apply-combine): o pandas divide as linhas por cada valor da coluna indicada, aplica uma função a cada grupo (aqui, a soma) e combina os resultados numa única estrutura. Para obter a receita por região, agrupamos por region, escolhemos a coluna revenue e aplicamos sum():

revenue_by_region = sales.groupby("region")["revenue"].sum()
print(revenue_by_region)

O resultado é uma Series em que o índice passa a ser a região: Center soma 70, North soma 205 e South soma 260. Repara que a coluna pela qual agrupámos deixa de ser uma coluna normal e passa a ser o índice do resultado.

Passo 3: Aplicar várias agregações com agg()

Na prática queremos quase sempre mais do que uma métrica. Com o método agg() e a chamada named aggregation damos um nome a cada resultado e indicamos, para cada um, a coluna e a função a aplicar. Assim obtemos várias colunas de resumo de uma só vez, já com nomes claros:

summary = sales.groupby("region").agg(
    total_revenue=("revenue", "sum"),
    avg_units=("units", "mean"),
    n_sales=("revenue", "count"),
)
print(summary)

Cada linha do resultado é uma região e cada coluna é uma métrica: a soma da receita, a média de unidades (mean) e o número de vendas (count). Outras funções muito usadas são min, max, median, std e nunique (valores distintos).

Passo 4: Agrupar por várias colunas

Podemos agrupar por mais do que uma coluna passando uma lista ao groupby. Para obter a receita por região e por produto, agrupamos por ambas:

by_region_product = (
    sales.groupby(["region", "product"])["revenue"].sum().reset_index()
)
print(by_region_product)

Agora o resultado tem uma linha por cada combinação de região e produto. Ao agrupar por várias colunas, o pandas cria um índice composto (MultiIndex); o reset_index() transforma esse índice em colunas normais e devolve um DataFrame limpo, pronto a usar num gráfico ou a exportar para um ficheiro.

Verificar o resultado

Uma forma simples de confirmar que o agrupamento está correto é comparar a soma de todos os grupos com a soma da coluna original. Se os dois valores forem diferentes, algo correu mal — por exemplo, valores em falta (NaN) que não foram contabilizados:

print(revenue_by_region.sum())   # 535
print(sales["revenue"].sum())    # 535

Os dois valores coincidem (535), por isso o groupby não perdeu nem duplicou linhas. Para leres o resultado mais depressa, podes ordená-lo com revenue_by_region.sort_values(ascending=False) e ver primeiro as regiões com maior receita.

Conclusão

Com o groupby passaste de uma tabela de linhas soltas para respostas claras por categoria — a base de quase toda a análise de dados em pandas. A partir daqui, dois próximos passos naturais são combinar o groupby com merge para cruzar informação de várias tabelas e criar uma tabela dinâmica com pivot_table. Qual vai ser a primeira pergunta que vais responder aos teus dados com um groupby?