Come utilizzare le funzioni groupby() e trasforma() in panda
È possibile utilizzare i seguenti metodi per utilizzare le funzioni groupby() e trasforma() insieme in un DataFrame panda:
Metodo 1: utilizzare groupby() e trasforma() con la funzione incorporata
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')
Metodo 2: utilizzare groupby() e trasforma() con una funzione personalizzata
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)
I seguenti esempi mostrano come utilizzare ciascun metodo nella pratica con i seguenti DataFrame panda:
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
Esempio 1: utilizzare groupby() e trasforma() con la funzione incorporata
Il codice seguente mostra come utilizzare le funzioni groupby( ) e trasforma() per aggiungere una nuova colonna al DataFrame chiamata 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
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 potremmo anche utilizzare un’altra funzione integrata come sum() per creare una nuova colonna che mostri la somma dei punti segnati per ciascuna squadra:
#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
La somma dei punti dei giocatori della squadra A era 85 e la somma dei punti dei giocatori della squadra B era 73 , quindi questi valori sono stati assegnati di conseguenza a ciascun giocatore in una nuova colonna.
Esempio 2: utilizzare groupby() e trasforma() con una funzione personalizzata
Il codice seguente mostra come utilizzare le funzioni groupby( ) e trasforma() per creare una funzione personalizzata che calcoli la percentuale dei punti totali segnati da ciascun giocatore nelle rispettive squadre:
#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