Pandas é uma poderosa biblioteca Python para manipulação e análise de dados. Uma de suas funcionalidades mais utilizadas é a capacidade de agrupar dados e realizar cálculos agregados. Este artigo explora vários métodos para calcular eficientemente somas agregadas após agrupar dados usando o método groupby()
, oferecendo soluções para diferentes níveis de complexidade e formatos de saída desejados.
Sumário:
- Soma Básica com groupby()
- Agregações Múltiplas com agg()
- Agregação Personalizada com apply()
- Somas Cumulativas com groupby() e cumsum()
- Remodelagem de Dados com pivot_table()
Soma Básica com groupby()
A maneira mais simples de calcular a soma de uma coluna após o agrupamento é usar groupby()
diretamente com o método sum()
:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
# Agrupa por 'Group' e soma 'Value'
grouped_sum = df.groupby('Group')['Value'].sum()
print(grouped_sum)
Isso produz concisamente uma Série com a soma de ‘Value’ para cada grupo.
Agregações Múltiplas com agg()
O método agg()
permite o cálculo eficiente de múltiplas estatísticas agregadas simultaneamente. Isso é particularmente útil quando você precisa de mais do que apenas a soma:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
# Calcula a soma, média e contagem para cada grupo
aggregated = df.groupby('Group')['Value'].agg(['sum', 'mean', 'count'])
print(aggregated)
Esta única linha de código calcula a soma, média e contagem de ‘Value’ para cada grupo, resultando em um DataFrame.
Agregação Personalizada com apply()
Para cenários mais complexos que exigem lógica de agregação personalizada, o método apply()
oferece a máxima flexibilidade. Você pode definir uma função para realizar quaisquer cálculos desejados:
import pandas as pd
import numpy as np
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
def custom_agg(x):
return pd.Series({'sum': x.sum(), 'range': x.max() - x.min()})
# Aplica a função de agregação personalizada
result = df.groupby('Group')['Value'].apply(custom_agg).reset_index()
print(result)
Aqui, uma função personalizada calcula a soma e o intervalo para cada grupo.
Somas Cumulativas com groupby()
e cumsum()
Para obter somas cumulativas dentro de cada grupo, combine groupby()
com o método cumsum()
:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
# Calcula a soma cumulativa para cada grupo
df['Cumulative Sum'] = df.groupby('Group')['Value'].cumsum()
print(df)
Isso adiciona uma nova coluna mostrando o total acumulado dentro de cada grupo.
Remodelagem de Dados com pivot_table()
Para uma representação mais visualmente atraente e facilmente analisável de dados agregados, especialmente quando se trata de múltiplas variáveis de agrupamento, use pivot_table()
:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Category': ['X', 'Y', 'X', 'Y', 'Z', 'X'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
pivot_table = pd.pivot_table(df, values='Value', index='Group', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)
Isso cria uma tabela dinâmica resumindo os dados, facilitando a comparação de somas entre diferentes categorias dentro de cada grupo.