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