O método agg()
Aplique várias funções de agregação de uma só vez com agg() e passe um dicionário para calcular estatísticas diferentes para colunas diferentes.
O método agg() é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 3 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.
Por que usar agg()?
Chamar sum() ou mean() diretamente em um objeto GroupBy fornece uma única estatística. Mas análises reais frequentemente precisam de várias estatísticas ao mesmo tempo — por exemplo, a receita total, o tamanho médio do pedido e a quantidade de pedidos por região. O método agg() (abreviação de aggregate) permite calcular tudo isso em uma única chamada eficiente, em vez de executar agregações separadas e combinar os resultados.
Passando uma lista de nomes de funções
O uso mais simples de agg() consiste em passar uma lista de textos com nomes de funções. O Pandas aplica cada função à coluna selecionada e retorna um DataFrame em que cada coluna corresponde a uma função. Essa abordagem funciona com qualquer nome de agregação integrada: 'sum', 'mean', 'min', 'max', 'count', 'std', 'median' e outros.
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'West', 'East', 'West', 'East', 'West'],
'revenue': [200, 340, 150, 290, 310, 410],
'units': [20, 35, 15, 30, 28, 40]
})
result = df.groupby('region')['revenue'].agg(['sum', 'mean', 'count', 'max'])
print(result)
# sum mean count max
# region
# East 660 220.000000 3 310
# West 1040 346.666667 3 410Renomeando colunas de saída com agregações nomeadas
Quando você passa uma lista de textos, as colunas de saída recebem os nomes das próprias funções ('sum', 'mean' etc.). Para obter uma saída mais organizada, use agregações nomeadas: passe argumentos nomeados em que a chave é o nome desejado para a coluna e o valor é uma tupla de (column, function). Essa é a abordagem moderna do Pandas e produz um código autoexplicativo.
result = df.groupby('region').agg(
total_revenue=('revenue', 'sum'),
avg_revenue=('revenue', 'mean'),
order_count=('revenue', 'count'),
max_order=('revenue', 'max')
)
print(result)
# total_revenue avg_revenue order_count max_order
# region
# East 660 220.000000 3 310
# West 1040 346.666667 3 410Funções diferentes para colunas diferentes
Você pode passar um dicionário para agg(), em que cada chave é um nome de coluna e cada valor é uma função (ou uma lista de funções) a ser aplicada a essa coluna. Isso permite calcular, por exemplo, sum em revenue, mas mean em units, tudo em uma única chamada de GroupBy.
result = df.groupby('region').agg({
'revenue': ['sum', 'mean'],
'units': ['sum', 'max']
})
print(result)
# revenue units
# sum mean sum max
# region
# East 660 220.000000 63 28
# West 1040 346.666667 105 40MultiIndex de colunas com agg() usando um dicionário
Quando você passa um dicionário com várias funções por coluna, o resultado tem um MultiIndex nas colunas. O primeiro nível é o nome da coluna original e o segundo é o nome da função. Você pode transformar esses nomes de colunas em uma única cadeia de caracteres usando uma compreensão de lista, facilitando o trabalho com o resultado nas etapas seguintes.
result = df.groupby('region').agg({'revenue': ['sum', 'mean'], 'units': 'sum'})
# Flatten MultiIndex columns
result.columns = ['_'.join(c).strip() for c in result.columns]
print(result.columns.tolist())
# ['revenue_sum', 'revenue_mean', 'units_sum']Usando funções personalizadas em agg()
Além de nomes em forma de texto, você pode passar qualquer função chamável do Python para agg(). A função recebe uma Series (os valores daquela coluna em um grupo) e deve retornar um escalar. Você pode passar uma função lambda ou uma função nomeada. As funções personalizadas são mais flexíveis, mas mais lentas do que as funções nomeadas integradas, pois não podem usar as otimizações no nível C.
def revenue_range(s):
return s.max() - s.min()
result = df.groupby('region')['revenue'].agg(['sum', revenue_range])
print(result)
# sum revenue_range
# region
# East 660 160
# West 1040 120Agregações nomeadas com funções personalizadas
A sintaxe de agregação nomeada também funciona com funções invocáveis, não apenas com nomes de texto. Basta passar uma tupla de (column, function) como valor do argumento nomeado, em que a função é qualquer função invocável que aceite uma Series e retorne um escalar. Isso mantém o código legível mesmo ao combinar funções integradas com lógica personalizada.
result = df.groupby('region').agg(
total=('revenue', 'sum'),
spread=('revenue', lambda s: s.max() - s.min()),
top_units=('units', 'max')
)
print(result)
# total spread top_units
# region
# East 660 160 28
# West 1040 120 40Agregação sem selecionar uma coluna
Quando o senhor chama agg() em um GroupBy sem selecionar uma coluna específica, o Pandas aplica a função a todas as colunas numéricas do DataFrame. Essa é uma maneira rápida de obter um resumo de todas as colunas numéricas de uma só vez. Tenha em mente que colunas com tipos de dados não numéricos serão ignoradas silenciosamente na maioria das agregações.
# Aggregate all numeric columns in one call
result = df.groupby('region').agg(['sum', 'mean'])
print(result)
# revenue units
# sum mean sum mean
# region
# East 660 220.000000 63 21.00
# West 1040 346.666667 105 35.00Combinando agg() com reset_index()
Depois de usar agg(), as colunas usadas para agrupamento tornam-se o índice. Um padrão comum é chamar reset_index() imediatamente para obter um DataFrame plano, no qual as chaves dos grupos são colunas comuns. Em seguida, o senhor pode renomear, ordenar e filtrar o resultado como qualquer outro DataFrame, facilitando seu envio para etapas posteriores ou sua exportação.
summary = (
df.groupby('region')
.agg(total=('revenue', 'sum'), orders=('revenue', 'count'))
.reset_index()
.sort_values('total', ascending=False)
)
print(summary)
# region total orders
# 1 West 1040 3
# 0 East 660 3agg() vs transform() vs apply()
É importante distinguir três métodos de GroupBy: agg() reduz cada grupo a um escalar, produzindo um resultado com menos linhas que o original. transform() retorna uma matriz com o mesmo formato da entrada, permitindo adicionar estatísticas do grupo como novas colunas. apply() é o mais flexível, mas também o mais lento, e será abordado na próxima lição.
# agg: one row per group
print(df.groupby('region')['revenue'].agg('mean'))
# region
# East 220.0
# West 346.7
# transform: one row per original row (group mean broadcast back)
df['group_mean'] = df.groupby('region')['revenue'].transform('mean')
print(df[['region', 'revenue', 'group_mean']].head())Exemplo prático: resumo de vendas
Veja um exemplo realista de ponta a ponta: calcular uma tabela de resumo de vendas com a receita total, o valor médio dos pedidos, o número de pedidos e o intervalo de receita por região, com nomes de colunas claros e ordenada pela receita total em ordem decrescente. Esse padrão pode ser aplicado diretamente a fluxos de trabalho de análise de produtos, finanças e marketing.
summary = (
df.groupby('region')
.agg(
total_revenue=('revenue', 'sum'),
avg_order=('revenue', 'mean'),
num_orders=('revenue', 'count'),
revenue_range=('revenue', lambda s: s.max() - s.min())
)
.reset_index()
.sort_values('total_revenue', ascending=False)
.round(2)
)
print(summary)Verificação rápida
Teste sua compreensão do método agg() apresentado nesta lição.
Recapitulação da lição
Nesta lição, o senhor aprendeu: como calcular várias agregações de uma só vez com agg(); como usar agregações nomeadas para obter nomes de colunas claros; e como aplicar funções diferentes a colunas diferentes usando um dicionário. A seguir, exploraremos transform() e filter(), que adicionam informações no nível do grupo de volta ao DataFrame original.
Perguntas Frequentes
A aula “O método agg()” é grátis?
Sim — o texto completo de “O método agg()” é 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 método agg()”?
Aplique várias funções de agregação de uma só vez com agg() e passe um dicionário para calcular estatísticas diferentes para colunas diferentes. 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 3 de 4.
Quanto tempo leva a aula “O método agg()”?
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