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

Aggiungi un commento

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