Panda's: een eenvoudige formule voor “groeperen op activa”
U kunt de volgende basissyntaxis gebruiken om het equivalent van een SQL-instructie „GROUP BY HAVING“ in panda’s uit te voeren:
df. groupby (' some_column '). filter ( lambda x: some condition)
De volgende voorbeelden laten zien hoe u deze syntaxis in de praktijk kunt gebruiken met de volgende panda’s DataFrame:
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
Voorbeeld 1: Groep panda’s met graaf
De volgende code laat zien hoe u rijen groepeert op basis van de waarde in de kolom Team en vervolgens alleen teams filtert waarvan het aantal groter is dan 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
Houd er rekening mee dat alleen rijen met de teamwaarde ‚A‘ of ‚B‘ worden geretourneerd, aangezien dit beide teams zijn waarvan het aantal groter is dan 2.
Voorbeeld 2: Groep panda’s met gemiddelde
De volgende code laat zien hoe u rijen groepeert op basis van de waarde in de kolom Team en vervolgens alleen teams filtert waarvan de gemiddelde puntwaarde groter is dan 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
Houd er rekening mee dat alleen rijen met de teamwaarde ‚A‘ of ‚C‘ worden geretourneerd, aangezien dit de twee teams zijn met een gemiddelde puntwaarde van meer dan 20.
Voorbeeld 3: Groep panda’s met som
De volgende code laat zien hoe u rijen kunt groeperen op waarde in de kolom Team en vervolgens alleen teams kunt filteren waarvan de puntensom exact 48 is:
#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
Houd er rekening mee dat alleen rijen met de teamwaarde ‚C‘ worden geretourneerd, aangezien dit het enige team is met een puntentotaal gelijk aan 48.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende bewerkingen in panda’s kunt uitvoeren:
Panda’s: haal de index op van rijen waarvan de kolom overeenkomt met de waarde
Panda’s: kolommen selecteren die een specifieke string bevatten
Panda’s: hoe u kunt controleren of een kolom een string bevat