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

Aggiungi un commento

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