Pandas: como usar uma função mutate() equivalente a r


Na linguagem de programação R, podemos usar a função mutate() do pacote dplyr para adicionar rapidamente novas colunas a um quadro de dados calculado a partir das colunas existentes.

Por exemplo, o código a seguir mostra como calcular o valor médio de uma coluna específica em R e adicionar esse valor como uma nova coluna em um quadro de dados:

 library (dplyr)

#create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 points=c(30, 22, 19, 14, 14, 11, 20, 28))

#add new column that shows mean points by team
df <- df %>%
      group_by(team) %>%
      mutate(mean_points = mean(points))

#view updated data frame
df

  team points mean_points           
1 to 30 21.2
2 A 22 21.2
3 A 19 21.2
4 A 14 21.2
5 B 14 18.2
6 B 11 18.2
7 B 20 18.2
8 B 28 18.2

O equivalente à função mutate() em pandas é a função transform() .

O exemplo a seguir mostra como usar esta função na prática.

Exemplo: usando transform() em pandas para replicar mutate() em R

Suponha que temos o seguinte DataFrame do pandas que mostra os pontos marcados por jogadores de basquete de diferentes times:

 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

Podemos usar a função transform() para adicionar uma nova coluna chamada Mean_points que mostra a média de pontos marcados por cada equipe:

 #add new column to DataFrame that shows mean points by team
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 isso corresponde aos resultados obtidos usando a função mutate() no exemplo introdutório.

É importante notar que você também pode usar lambda para realizar cálculos personalizados na função transform() .

Por exemplo, o código a seguir mostra como usar lambda para calcular a porcentagem do total de pontos marcados por cada jogador em seu respectivo time:

 #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 *