Panda: come utilizzare una funzione mutate() equivalente a r


Nel linguaggio di programmazione R, possiamo utilizzare la funzione mutate() del pacchetto dplyr per aggiungere rapidamente nuove colonne a un frame di dati calcolato dalle colonne esistenti.

Ad esempio, il codice seguente mostra come calcolare il valore medio di una colonna specifica in R e aggiungere tale valore come una nuova colonna in un frame di dati:

 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

L’equivalente della funzione mutate() nei panda è la funzione trasforma() .

L’esempio seguente mostra come utilizzare questa funzione nella pratica.

Esempio: utilizzo di transform() nei panda per replicare mutate() in R

Supponiamo di avere il seguente DataFrame panda che mostra i punti segnati da giocatori di basket di diverse squadre:

 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

Possiamo usare la funzione trasforma() per aggiungere una nuova colonna chiamata Mean_points che mostra la media dei punti segnati da ciascuna squadra:

 #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

Il valore medio del punto per i giocatori della squadra A era 21,25 e il valore medio del punto per i giocatori della squadra B era 18,25 , quindi questi valori sono stati assegnati di conseguenza a ciascun giocatore in una nuova colonna.

Tieni presente che questo corrisponde ai risultati ottenuti utilizzando la funzione mutate() nell’esempio introduttivo.

Vale la pena notare che puoi anche utilizzare lambda per eseguire calcoli personalizzati nella funzione trasforma() .

Ad esempio, il codice seguente mostra come utilizzare lambda per calcolare la percentuale dei punti totali segnati da ciascun giocatore della rispettiva squadra:

 #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

Ecco come interpretare il risultato:

  • Il primo giocatore della squadra A ha segnato 30 punti su un totale di 85 tra i giocatori della squadra A. Pertanto, la sua percentuale sui punti totali segnati era 30/85 = 0,352941 .
  • Il secondo giocatore della squadra A ha segnato 22 punti su un totale di 85 tra i giocatori della squadra A. Pertanto, la sua percentuale sui punti totali segnati era 22/85 = 0,258824 .

E così via.

Tieni presente che possiamo utilizzare l’argomento lambda nella funzione trasforma() per eseguire qualsiasi calcolo personalizzato desideriamo.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:

Come eseguire una somma GroupBy in Pandas
Come utilizzare Groupby e Plot in Pandas
Come contare valori univoci utilizzando GroupBy in Pandas

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *