Pandas: eine einfache formel für die „gruppierung nach vermögenswerten“
Sie können die folgende grundlegende Syntax verwenden, um das Äquivalent einer „GROUP BY HAVING“-SQL-Anweisung in Pandas auszuführen:
df. groupby (' some_column '). filter ( lambda x: some condition)
Die folgenden Beispiele zeigen, wie diese Syntax in der Praxis mit dem folgenden Pandas DataFrame verwendet wird:
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
Beispiel 1: Gruppe Pandas mit Count
Der folgende Code zeigt, wie Zeilen basierend auf dem Wert in der Spalte „Team“ gruppiert und dann nur Teams gefiltert werden, deren Anzahl größer als 2 ist:
#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
Beachten Sie, dass nur Zeilen mit dem Teamwert „A“ oder „B“ zurückgegeben werden, da es sich hierbei um Teams handelt, deren Anzahl größer als 2 ist.
Beispiel 2: Gruppe von Pandas, die mit Durchschnitt essen
Der folgende Code zeigt, wie Zeilen basierend auf dem Wert in der Spalte „Team“ gruppiert und dann nur Teams gefiltert werden, deren durchschnittlicher Punktwert größer als 20 ist:
#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
Beachten Sie, dass nur Zeilen mit einem Teamwert von „A“ oder „C“ zurückgegeben werden, da dies die beiden Teams sind, die einen durchschnittlichen Punktwert von mehr als 20 haben.
Beispiel 3: Gruppe Pandas mit Summe
Der folgende Code zeigt, wie man Zeilen nach Wert in der Spalte „Team“ gruppiert und dann nur Teams herausfiltert, deren Punktsumme genau 48 beträgt:
#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
Beachten Sie, dass nur Zeilen mit einem Teamwert von „C“ zurückgegeben werden, da dies das einzige Team ist, das eine Punktesumme von 48 hat.
Zusätzliche Ressourcen
In den folgenden Tutorials wird erläutert, wie andere gängige Vorgänge in Pandas ausgeführt werden:
Pandas: Index der Zeilen abrufen, deren Spalte mit dem Wert übereinstimmt
Pandas: So wählen Sie Spalten aus, die eine bestimmte Zeichenfolge enthalten
Pandas: So überprüfen Sie, ob die Spalte eine Zeichenfolge enthält