Pandas: como agrupar e agregar em várias colunas


Freqüentemente, você pode querer agrupar e agregar várias colunas de um DataFrame do pandas.

Felizmente, isso é fácil de fazer usando as funções .groupby() e .agg() do pandas.

Este tutorial explica vários exemplos de uso prático dessas funções.

Exemplo 1: Agrupe por duas colunas e encontre a média

Suponha que temos o seguinte DataFrame do pandas:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

#view DataFrame
print (df)

  team position assists rebounds
0 AG 5 11
1 BG 7 8
2 BF 7 10
3 BG 8 6
4 BF 5 6
5 MF 7 9
6 MC 6 6
7 MC 9 10

O código a seguir mostra como agrupar por colunas “equipe” e “posição” e encontrar a média de passes:

 df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()


        team position assists
                          mean
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

A saída nos diz:

  • A média de assistências dos jogadores da posição G da equipe A é de 5,0 .
  • A média de assistências dos jogadores da posição F da equipe B é de 6,0 .
  • A média de assistências dos jogadores da posição G da equipe B é de 7,5 .

E assim por diante.

Também podemos usar o seguinte código para renomear as colunas do DataFrame resultante:

 #group by team and position and find mean assists
new = df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()

#rename columns
new.columns = ['team', 'pos', 'mean_assists']

#view DataFrame
print (new)

	team pos mean_assists
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

Exemplo 2: Agrupar por duas colunas e encontrar múltiplas estatísticas

Vamos supor que estamos usando o mesmo DataFrame do pandas do exemplo anterior:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

O código a seguir mostra como encontrar a mediana e o número máximo de rebotes, agrupados nas colunas “equipe” e “posição”:

 df. groupby (['team', 'position']). agg ({'rebounds': ['median', 'max']}). reset_index ()


        team position rebounds
                         median max
0 A G 11 11
1 B F 8 10
2 B G 7 8
3 M C 8 10
4 M F 9 9

A saída nos diz:

  • A mediana de rebotes para jogadores na posição G do Time A é 11 .
  • O máximo de rebotes para jogadores na posição G da equipe A é 11 .
  • A mediana de rebotes dos jogadores na posição F do time B é 8 .
  • O máximo de rebotes para jogadores na posição F do time B é 10 .

E assim por diante.

Recursos adicionais

Como filtrar um DataFrame do Pandas em múltiplas condições
Como contar valores ausentes em um DataFrame do Pandas
Como empilhar vários DataFrames Pandas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *