Agrupamento e Agregação com Pandas

PandasBeginner
Pratique Agora

Introdução

Agrupar e agregar dados são operações fundamentais na análise de dados. Elas permitem dividir um grande conjunto de dados em grupos menores com base em certos critérios e, em seguida, calcular estatísticas de resumo para cada grupo. Este processo é essencial para descobrir padrões, comparar segmentos e obter insights significativos a partir de dados brutos.

Na biblioteca de análise de dados do Python, Pandas, esta estratégia "split-apply-combine" (dividir-aplicar-combinar) é principalmente tratada pelo poderoso método groupby(). Neste laboratório, você aprenderá a usar groupby() para realizar agrupamento e agregação. Você começará agrupando dados por uma única coluna, aplicará funções de agregação, usará múltiplas funções de uma vez, agrupará por múltiplas colunas e, finalmente, formatará a saída em um DataFrame padrão.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 91%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Agrupar por coluna única usando groupby

Nesta etapa, você aprenderá o uso básico do método groupby() para dividir um DataFrame em grupos. O próprio método groupby() não calcula nada, mas retorna um objeto DataFrameGroupBy. Este objeto contém todas as informações necessárias para, em seguida, aplicar cálculos a cada grupo.

Primeiro, vamos agrupar nosso DataFrame de exemplo pela coluna Category. Isso criará grupos distintos para 'Electronics', 'Clothing' e 'Books'.

Abra o arquivo main.py no editor à esquerda. O código inicial para criar um DataFrame já está lá. Adicione o seguinte código ao final do arquivo main.py:

## Group by the 'Category' column
grouped_by_category = df.groupby('Category')

## The result is a DataFrameGroupBy object
print("Type of the grouped object:")
print(type(grouped_by_category))

## To see the contents, you can iterate over the groups
print("\nIterating over groups to see their content:")
for name, group in grouped_by_category:
    print(f"\nGroup: {name}")
    print(group)

Agora, execute o script a partir do terminal para ver a saída.

python3 main.py

Você verá o DataFrame original, seguido pelo tipo do objeto groupby, e então o conteúdo de cada grupo. Isso demonstra que o DataFrame foi dividido com sucesso com base nos valores únicos na coluna 'Category'.

Original DataFrame:
      Category Region  Sales  Units
0  Electronics  North   1200     10
1     Clothing  South    800     25
2  Electronics  North   1500      8
3        Books   West    300     15
4     Clothing   East    900     20
5        Books   West    450     18

==============================

Type of the grouped object:
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>

Iterating over groups to see their content:

Group: Books
  Category Region  Sales  Units
3    Books   West    300     15
5    Books   West    450     18

Group: Clothing
   Category Region  Sales  Units
1  Clothing  South    800     25
4  Clothing   East    900     20

Group: Electronics
      Category Region  Sales  Units
0  Electronics  North   1200     10
2  Electronics  North   1500      8

Aplicar agregação de soma nos grupos

Nesta etapa, você aprenderá como aplicar uma função de agregação aos grupos que você criou. Após agrupar os dados, o próximo passo mais comum é realizar um cálculo, como sum(), mean(), count() ou max(), em cada grupo.

Vamos calcular as vendas totais para cada categoria de produto. Para fazer isso, primeiro você agrupa por Category e depois seleciona a coluna Sales para aplicar a função sum().

Adicione o seguinte código ao final do seu arquivo main.py. Você pode remover o loop for da etapa anterior para manter a saída limpa.

## Group by 'Category' and calculate the sum of 'Sales' for each group
category_sales_sum = df.groupby('Category')['Sales'].sum()

print("Total sales per category:")
print(category_sales_sum)

Salve o arquivo e execute-o novamente.

python3 main.py

A saída agora mostrará uma Pandas Series onde o índice é o nome da categoria e os valores são as vendas totais para essa categoria.

... (previous output) ...

Total sales per category:
Category
Books           750
Clothing       1700
Electronics    2700
Name: Sales, dtype: int64

Esta é uma maneira poderosa e concisa de resumir seus dados. Você pode aplicar a mesma lógica a outras colunas numéricas ou usar outras funções de agregação como mean() para encontrar a média.

Agregar múltiplas funções com agg

Nesta etapa, você aprenderá como aplicar múltiplas funções de agregação aos seus grupos simultaneamente usando o método agg(). Isso é muito útil quando você deseja calcular várias estatísticas de resumo de uma vez, como o total e a média das vendas.

O método agg() pode receber uma lista de strings, onde cada string é o nome de uma função de agregação. Vamos calcular tanto a sum (soma) quanto a mean (média) de Sales para cada Category.

Adicione o seguinte código ao final do seu arquivo main.py:

## Group by 'Category' and apply multiple aggregations on 'Sales'
category_agg = df.groupby('Category')['Sales'].agg(['sum', 'mean'])

print("\nSum and mean of sales per category:")
print(category_agg)

Salve o arquivo e execute-o.

python3 main.py

A saída agora é um DataFrame. O índice ainda é a Category, mas as colunas são hierárquicas, mostrando tanto sum quanto mean para os dados de Sales.

... (previous output) ...

Sum and mean of sales per category:
              sum    mean
Category
Books         750   375.0
Clothing     1700   850.0
Electronics  2700  1350.0

O método agg() oferece uma maneira flexível de gerar resumos abrangentes dos seus dados agrupados.

Agrupar por múltiplas colunas

Nesta etapa, você aprenderá como agrupar um DataFrame por mais de uma coluna. Isso é útil para criar grupos mais granulares e analisar interações entre diferentes categorias. Para fazer isso, você simplesmente passa uma lista de nomes de colunas para o método groupby().

Vamos encontrar as vendas totais para cada combinação de Region e Category. Isso nos mostrará como as vendas de diferentes categorias de produtos são distribuídas entre as regiões.

Adicione o seguinte código ao final do seu arquivo main.py:

## Group by multiple columns: 'Region' and 'Category'
multi_group_sum = df.groupby(['Region', 'Category'])['Sales'].sum()

print("\nTotal sales per Region and Category:")
print(multi_group_sum)

Salve o arquivo e execute o script.

python3 main.py

A saída terá um MultiIndex nas linhas, com o primeiro nível sendo Region e o segundo nível sendo Category. Isso fornece uma análise detalhada das vendas.

... (previous output) ...

Total sales per Region and Category:
Region  Category
East    Clothing        900
North   Electronics    2700
South   Clothing        800
West    Books           750
Name: Sales, dtype: int64

Como você pode ver, agrupar por múltiplas colunas permite uma análise mais profunda e hierárquica do seu conjunto de dados.

Resetar índice em DataFrame agrupado

Nesta etapa, você aprenderá como converter a saída agrupada de volta em um DataFrame regular, onde as chaves de agrupamento são colunas em vez do índice. Por padrão, groupby() torna as chaves de agrupamento o índice da Série ou DataFrame resultante. Às vezes, você deseja um DataFrame "plano" para processamento ou visualização posterior.

A maneira mais fácil de conseguir isso é usando o parâmetro as_index=False dentro do método groupby().

Vamos repetir o agrupamento de coluna única da Etapa 2, mas desta vez manteremos Category como uma coluna regular.

Adicione o seguinte código ao final do seu arquivo main.py:

## Group by 'Category' and aggregate, but keep 'Category' as a column
category_sales_flat = df.groupby('Category', as_index=False)['Sales'].sum()

print("\nGrouped data with 'Category' as a column:")
print(category_sales_flat)

Salve o arquivo e execute-o pela última vez.

python3 main.py

Observe a saída. Em vez de Category ser o índice, agora é a primeira coluna de um novo DataFrame, e o DataFrame tem um índice inteiro padrão (0, 1, 2).

... (previous output) ...

Grouped data with 'Category' as a column:
      Category  Sales
0        Books    750
1     Clothing   1700
2  Electronics   2700

Este formato é frequentemente mais conveniente para tarefas subsequentes de manipulação de dados. Um método alternativo é chamar .reset_index() no resultado agrupado, o que alcança o mesmo resultado.

Resumo

Parabéns por completar este laboratório sobre agrupamento e agregação com Pandas! Você aprendeu uma das funcionalidades mais poderosas e comumente usadas da biblioteca Pandas para análise de dados.

Neste laboratório, você praticou:

  • Dividir um DataFrame em grupos usando df.groupby('column_name').
  • Aplicar uma única função de agregação como .sum() aos grupos.
  • Usar o método .agg() para aplicar múltiplas funções de agregação de uma vez.
  • Agrupar por múltiplas colunas para criar um resumo hierárquico usando df.groupby(['col1', 'col2']).
  • Criar um DataFrame plano a partir de uma operação groupby usando o parâmetro as_index=False.

Dominar essas técnicas é um passo crucial para se tornar proficiente em manipulação e análise de dados com Python e Pandas.