Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Para saber mais: entendendo o groupby | Pandas: conhecendo a biblioteca

O método groupby() do Pandas é uma das ferramentas mais importantes para análise de dados porque permite agrupar registros com características semelhantes e aplicar cálculos sobre cada grupo.

Como funciona?

O processo pode ser entendido em três etapas:

  1. Split (Dividir) → separa os dados em grupos.
  2. Apply (Aplicar) → executa uma operação em cada grupo.
  3. Combine (Combinar) → reúne os resultados em uma nova estrutura.

Exemplo do DataFrame

import pandas as pd

df = pd.DataFrame({
   'Animal': ['Cachorro', 'Gato', 'Elefante', 'Cachorro', 'Gato', 'Elefante'],
   'Cor': ['Preto', 'Branco', 'Cinza', 'Marrom', 'Preto', 'Marrom'],
   'Quantidade': [2, 3, 1, 4, 2, 2]
})

Resultado:

AnimalCorQuantidade
CachorroPreto2
GatoBranco3
ElefanteCinza1
CachorroMarrom4
GatoPreto2
ElefanteMarrom2

Agrupando por uma coluna

df.groupby('Animal').sum(numeric_only=True)

Resultado:

AnimalQuantidade
Cachorro6
Elefante3
Gato5

O Pandas agrupou todas as linhas com o mesmo animal e somou os valores da coluna Quantidade.


Agrupando por duas colunas

df.groupby(['Animal', 'Cor'])[['Quantidade']].sum()

Resultado:

AnimalCorQuantidade
CachorroMarrom4
CachorroPreto2
ElefanteCinza1
ElefanteMarrom2
GatoBranco3
GatoPreto2

Agora o agrupamento considera a combinação Animal + Cor.


Operações úteis

Contagem

df.groupby('Animal').count()

Média

df.groupby('Animal').mean(numeric_only=True)

Máximo

df.groupby('Animal').max()

Mínimo

df.groupby('Animal').min()

Múltiplas agregações

df.groupby('Animal')['Quantidade'].agg(['sum', 'mean', 'max', 'min'])

Resultado:

Animalsummeanmaxmin
Cachorro63.042
Elefante31.521
Gato52.532

1 resposta
solução!

Olá, Estudante. Como vai?

Excelente explicação! O conceito de Split-Apply-Combine (Dividir-Aplicar-Combinar) é a base de ouro para entender o que acontece por debaixo dos panos quando chamamos o método groupby(). Visualizar o processo dessa forma ajuda muito a tirar o peso de apenas decorar a sintaxe e focar na lógica da manipulação dos dados.

Para enriquecer ainda mais o seu tópico e trazer algumas técnicas avançadas que expandem o poder do groupby(), preparei três complementos práticos:

1. Evitando que o grupo vire Índice (as_index=False)

Por padrão, quando você agrupa os dados (por exemplo, df.groupby('Animal')), a coluna utilizada para agrupar se transforma no novo índice (index) do DataFrame resultante.

Se o seu objetivo final for exportar esse resultado para um CSV ou criar um gráfico, pode ser mais vantajoso manter a coluna de agrupamento como uma coluna normal. Para fazer isso, basta usar o parâmetro as_index=False:

df_resultado = df.groupby('Animal', as_index=False)['Quantidade'].sum()
print(df_resultado)

Resultado:

     Animal  Quantidade
0  Cachorro           6
1  Elefante           3
2      Gato           5

2. Filtrando Grupos com o método filter()

Às vezes, você não quer apenas calcular uma média ou soma dos grupos, mas sim descartar grupos inteiros baseando-se em uma condição coletiva. O Pandas possui o método .filter() específico para trabalhar após o groupby().

Por exemplo, se você quisesse manter no DataFrame original apenas os animais cuja soma total de quantidade seja maior que 3 (eliminando os elefantes da análise):

df_filtrado = df.groupby('Animal').filter(lambda x: x['Quantidade'].sum() > 3)
print(df_filtrado)

3. Mantendo o formato original com transform()

Diferente dos métodos de agregação que reduzem o tamanho do seu DataFrame (combinando várias linhas em uma só), o método .transform() aplica o cálculo no grupo, mas retorna o resultado com o mesmo tamanho do DataFrame original.

Isso é incrivelmente útil para criar colunas de proporção ou preencher dados faltantes baseados no grupo. Veja como calcular o total do respectivo grupo em cada linha:

df['Total_do_Animal'] = df.groupby('Animal')['Quantidade'].transform('sum')
print(df)

Resultado:

     Animal     Cor  Quantidade  Total_do_Animal
0  Cachorro   Preto           2                6
1      Gato  Branco           3                5
2  Elefante   Cinza           1                3
3  Cachorro  Marrom           4                6
4      Gato   Preto           2                5
5  Elefante  Marrom           2                3

Parabéns pela didática aplicada no resumo! Dominar o groupby() é um dos passos mais importantes para quem deseja se destacar na análise exploratória de dados.

Espero que possa ter lhe ajudado!