Como usar as funções groupby() e transform() no pandas


Você pode usar os seguintes métodos para usar as funções groupby() e transform() juntas em um DataFrame do pandas:

Método 1: Use groupby() e transform() com função integrada

 df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')

Método 2: use groupby() e transform() com uma função personalizada

 df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)

Os exemplos a seguir mostram como usar cada método na prática com o seguinte DataFrame do pandas:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' points ': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  team points
0 to 30
1 to 22
2 to 19
3 to 14
4 B 14
5 B 11
6 B 20
7 B 28

Exemplo 1: Use groupby() e transform() com função integrada

O código a seguir mostra como usar as funções groupby( ) e transform() para adicionar uma nova coluna ao DataFrame chamada mean_points:

 #create new column called mean_points
df[' mean_points '] = df. groupby (' team ')[' points ']. transform (' mean ')

#view updated DataFrame
print (df)

  team points mean_points
0 to 30 21.25
1 to 22 21.25
2 A 19 21.25
3 to 14 21.25
4 B 14 18.25
5 B 11 18.25
6 B 20 18.25
7 B 28 18.25

O valor médio de pontos dos jogadores do Time A foi de 21,25 e o valor médio de pontos dos jogadores do Time B foi de 18,25 , portanto esses valores foram atribuídos de acordo a cada jogador em uma nova coluna.

Observe que também poderíamos usar outra função integrada, como sum() , para criar uma nova coluna exibindo a soma dos pontos marcados para cada equipe:

 #create new column called sum_points
df[' sum_points '] = df. groupby (' team ')[' points ']. transform (' sum ')

#view updated DataFrame
print (df)

  team points sum_points
0 to 30 85
1 to 22 85
2 A 19 85
3 to 14 85
4 B 14 73
5 B 11 73
6 B 20 73
7 B 28 73

A soma dos pontos dos jogadores da equipe A foi 85 e a soma dos pontos dos jogadores da equipe B foi 73 , portanto esses valores foram atribuídos de acordo com cada jogador em uma nova coluna.

Exemplo 2: Use groupby() e transform() com uma função personalizada

O código a seguir mostra como usar as funções groupby( ) e transform() para criar uma função personalizada que calcula a porcentagem do total de pontos marcados por cada jogador em suas respectivas equipes:

 #create new column called percent_of_points
df[' percent_of_points '] = df. groupby (' team ')[' points ']. transform ( lambda x:x/ x.sum ())

#view updated DataFrame
print (df)

  team points percent_of_points
0 A 30 0.352941
1 A 22 0.258824
2 A 19 0.223529
3 A 14 0.164706
4 B 14 0.191781
5 B 11 0.150685
6 B 20 0.273973
7 B 28 0.383562

Veja como interpretar o resultado:

  • O primeiro jogador do Time A marcou 30 pontos de um total de 85 entre os jogadores do Time A. Assim, seu percentual no total de pontos marcados foi 30/85 = 0,352941 .
  • O segundo jogador do Time A marcou 22 pontos de um total de 85 entre os jogadores do Time A. Assim, seu percentual no total de pontos marcados foi 22/85 = 0,258824 .

E assim por diante.

Observe que podemos usar o argumento lambda na função transform() para realizar qualquer cálculo personalizado que desejarmos.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns em pandas:

Como realizar uma soma GroupBy no Pandas
Como usar Groupby e Plot no Pandas
Como contar valores únicos usando GroupBy no Pandas

Add a Comment

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