Panda: come raggruppare e aggregare su più colonne
Spesso potresti voler raggruppare e aggregare più colonne di un DataFrame panda.
Fortunatamente, questo è facile da fare utilizzando le funzioni panda .groupby() e .agg() .
Questo tutorial spiega diversi esempi di utilizzo pratico di queste funzioni.
Esempio 1: raggruppa per due colonne e trova la media
Supponiamo di avere i seguenti panda DataFrame:
import pandas as pd #createDataFrame df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]}) #view DataFrame print (df) team position assists rebounds 0 AG 5 11 1 BG 7 8 2 BF 7 10 3 BG 8 6 4 BF 5 6 5 MF 7 9 6 MC 6 6 7 MC 9 10
Il codice seguente mostra come raggruppare per colonne “squadra” e “posizione” e trovare la media dei passaggi:
df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index () team position assists mean 0 A G 5.0 1 B F 6.0 2 B G 7.5 3 M C 7.5 4M F 7.0
L’output ci dice:
- La media degli assist per i giocatori in posizione G della squadra A è 5,0 .
- La media degli assist per i giocatori in posizione F nella squadra B è 6,0 .
- La media degli assist per i giocatori in posizione G della squadra B è 7,5 .
E così via.
Possiamo anche utilizzare il seguente codice per rinominare le colonne del DataFrame risultante:
#group by team and position and find mean assists new = df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index () #rename columns new.columns = ['team', 'pos', 'mean_assists'] #view DataFrame print (new) team pos mean_assists 0 A G 5.0 1 B F 6.0 2 B G 7.5 3 M C 7.5 4M F 7.0
Esempio 2: raggruppa per due colonne e trova più statistiche
Supponiamo di utilizzare lo stesso DataFrame panda dell’esempio precedente:
import pandas as pd #createDataFrame df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'], 'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'], 'assists': [5, 7, 7, 8, 5, 7, 6, 9], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})
Il codice seguente mostra come trovare la mediana e il numero massimo di rimbalzi, raggruppati nelle colonne “squadra” e “posizione”:
df. groupby (['team', 'position']). agg ({'rebounds': ['median', 'max']}). reset_index () team position rebounds median max 0 A G 11 11 1 B F 8 10 2 B G 7 8 3 M C 8 10 4 M F 9 9
L’output ci dice:
- La mediana dei rimbalzi per i giocatori in posizione G della Squadra A è 11 .
- Il massimo dei rimbalzi per i giocatori in posizione G della squadra A è 11 .
- La mediana dei rimbalzi dei giocatori in posizione F della squadra B è 8 .
- Il massimo dei rimbalzi per i giocatori in posizione F della squadra B è 10 .
E così via.
Risorse addizionali
Come filtrare un Pandas DataFrame su più condizioni
Come contare i valori mancanti in un Pandas DataFrame
Come impilare più DataFrames Pandas