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

Aggiungi un commento

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