Panda: una formula semplice per “raggruppare per asset”
È possibile utilizzare la seguente sintassi di base per eseguire l’equivalente di un’istruzione SQL “GROUP BY HAVING” in panda:
df. groupby (' some_column '). filter ( lambda x: some condition)
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', 'C', 'C'], ' position ': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'], ' points ': [30, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print (df) team position points 0 AG 30 1 AF 22 2 FY 19 3 BG 14 4 BF 14 5 BF 11 6 GC 20 7 GC 28
Esempio 1: Gruppo di panda che hanno con Count
Il codice seguente mostra come raggruppare le righe in base al valore nella colonna Team e quindi filtrare solo i team il cui conteggio è maggiore di 2:
#group by team and filter for teams with count > 2
df. groupby (' team '). filter ( lambda x: len (x) > 2 )
team position points
0 A G 30
1 A F 22
2 A F 19
3 B G 14
4 B F 14
5 B F 11
Tieni presente che vengono restituite solo le righe con un valore di squadra “A” o “B” poiché si tratta di entrambe le squadre il cui numero è maggiore di 2.
Esempio 2: Gruppo di panda che hanno una media
Il codice seguente mostra come raggruppare le righe in base al valore nella colonna Squadra e quindi filtrare solo le squadre il cui valore in punti medio è maggiore di 20:
#group by team and filter for teams with mean points > 20
df. groupby (' team '). filter ( lambda x: x[' points ']. mean () > 20 )
team position points
0 A G 30
1 A F 22
2 A F 19
6 C G 20
7 C G 28
Tieni presente che vengono restituite solo le righe con un valore di squadra “A” o “C” poiché queste sono le due squadre che hanno un valore di punto medio maggiore di 20.
Esempio 3: Gruppo di panda che hanno con sum
Il codice seguente mostra come raggruppare le righe in base al valore nella colonna Squadra e quindi filtrare solo le squadre la cui somma dei punti è esattamente 48:
#group by team and filter for teams with sum of points equal to 48
df. groupby (' team '). filter ( lambda x: x[' points ']. sum () == 48 )
team position points
6 C G 20
7 C G 28
Tieni presente che vengono restituite solo le righe con un valore di squadra “C” poiché questa è l’unica squadra che ha una somma di punti pari a 48.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:
Panda: ottieni l’indice delle righe la cui colonna corrisponde al valore
Panda: come selezionare colonne contenenti una stringa specifica
Panda: come verificare se la colonna contiene una stringa