Come applicare una funzione a pandas groupby
È possibile utilizzare la seguente sintassi di base per utilizzare le funzioni groupby() e apply() insieme in un DataFrame panda:
df. groupby (' var1 '). apply ( lambda x: some function)
I seguenti esempi mostrano come utilizzare questa sintassi in pratica con i seguenti DataFrame panda:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'B'], ' points_for ': [18, 22, 19, 14, 11, 20, 28], ' points_against ': [14, 21, 19, 14, 12, 20, 21]}) #view DataFrame print (df) team points_for points_against 0 to 18 14 1 To 22 21 2 A 19 19 3 B 14 14 4 B 11 12 5 B 20 20 6 B 28 21
Esempio 1: utilizzare groupby() e apply() per trovare le frequenze relative
Il codice seguente mostra come utilizzare le funzioni groupby( ) e apply() per trovare le frequenze relative di ciascun nome di squadra nel DataFrame panda:
#find relative frequency of each team name in DataFrame
df. groupby (' team '). apply ( lambda x:x[' team ']. count ()/ df.shape [0])
team
A 0.428571
B 0.571429
dtype:float64
Dal risultato, possiamo vedere che la squadra A appare nel 42,85% di tutte le righe e la squadra B appare nel 57,14% di tutte le righe.
Esempio 2: utilizzare groupby() e apply() per trovare i valori massimi
Il codice seguente mostra come utilizzare le funzioni groupby( ) e apply() per trovare i valori massimi di “points_for” per ogni squadra:
#find max "points_for" values for each team
df. groupby (' team '). apply ( lambda x:x[' points_for ']. max ())
team
At 22
B28
dtype: int64
Dal risultato, possiamo vedere che il massimo dei punti segnati dalla squadra A è 22 e il massimo dei punti segnati dalla squadra B è 28.
Esempio 3: utilizzare groupby() e apply() per eseguire un calcolo personalizzato
Il codice seguente mostra come utilizzare le funzioni groupby( ) e apply() per trovare la differenza media tra “punti_per” e “punti_contro” per ciascuna squadra:
#find max "points_for" values for each team
df. groupby (' team '). apply ( lambda x: (x[' points_for '] - x[' points_against ']). mean ())
team
A 1.666667
B 1.500000
dtype:float64
Dai risultati possiamo vedere che la differenza media tra “punti a favore” e “punti contro” è 1,67 per la squadra A e 1,50 per la squadra B.
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