English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Beispiel für die Operationen von Pandas GroupBy
Jegliche groupby-Operation führt auf dem ursprünglichen Objekt die folgenden Operationen aus:
Objekte teilen Funktion anwenden Ergebnisse zusammenführen
In vielen Fällen teilen wir die Daten in mehrere Gruppen und wenden einige Funktionen auf jede Untergruppe an. In der Apply-Funktion können wir folgende Operationen ausführen-
Aggregation − Zusammenfassende Statistiken berechnen Transformation − Gruppierungsoperationen Filtern − Daten unter bestimmten Bedingungen filtern
Nun erstellen wir ein DataFrame-Objekt und führen alle Operationen darauf durch.
#import die pandas-Bibliothek import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) print(df)
Die Ergebnisse des Laufens sind wie folgt:
Punkte Rang Team Jahr 0 876 1 Riders 2014 1 789 2 Riders 2015 2 863 2 Devils 2014 3 673 3 Devils 2015 4 741 3 Kings 2014 5 812 4 kings 2015 6 756 1 Kings 2016 7 788 1 Kings 2017 8 694 2 Riders 2016 9 701 4 Royals 2014 10 804 1 Royals 2015 11 690 2 Riders 2017
Objekte können in beliebige andere Objekte aufgeteilt werden. Es gibt mehrere Methoden zur Aufteilung von Objekten, z.B.:
obj.groupby('key') obj.groupby(['key1','key2']) obj.groupby(key,axis=1)
Lassen Sie uns nun sehen, wie wir den Gruppierungsobjekt auf das DataFrame anwenden
# Importieren Sie die pandas-Bibliothek import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) print(df.groupby('Team'))
Die Ergebnisse des Laufens sind wie folgt:
# Importieren Sie die pandas-Bibliothek import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) print(df.groupby('Team').groups)
Die Ergebnisse des Laufens sind wie folgt:
{'Könige': Int64Index([4, 6, 7, dtype='int64'), 'Teufel': Int64Index([2, 3, dtype='int64'), 'Reiter': Int64Index([0, 1, 8, 11, dtype='int64'), 'Könige': Int64Index([9, 10, dtype='int64'), 'kings' : Int64Index([5, dtype='int64})
Gruppierung mit mehreren Spalten
# Importieren Sie die pandas-Bibliothek import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) print(df.groupby(['Team','Jahr']).groups)
Die Ergebnisse des Laufens sind wie folgt:
{('Könige', 2014]): Int64Index([4, dtype='int64'), ('Royals', 2014]): Int64Index([9, dtype='int64'), ('Reiter', 2014]): Int64Index([0], dtype='int64'), ('Reiter', 2015]): Int64Index([1, dtype='int64'), ('Kings', 2016]): Int64Index([6, dtype='int64'), ('Reiter', 2016]): Int64Index([8, dtype='int64'), ('Reiter', 2017]): Int64Index([11, dtype='int64'), ('Teufel', 2014]): Int64Index([2, dtype='int64'), ('Teufel', 2015]): Int64Index([3, dtype='int64'), ('kings', 2015]): Int64Index([5, dtype='int64'), ('Royals', 2015]): Int64Index([10, dtype='int64'), ('Kings', 2017]): Int64Index([7, dtype='int64})
Mit dem groupby-Objekt können wir das Objekt ähnlich wie itertools.obj durchlaufen.
# Importieren Sie die pandas-Bibliothek import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) grouped = df.groupby('Year') for name, group in grouped: print(name) print(group)
Die Ergebnisse des Laufens sind wie folgt:
2014 Punkte Rang Team Jahr 0 876 1 Riders 2014 2 863 2 Devils 2014 4 741 3 Kings 2014 9 701 4 Royals 2014 2015 Punkte Rang Team Jahr 1 789 2 Riders 2015 3 673 3 Devils 2015 5 812 4 kings 2015 10 804 1 Royals 2015 2016 Punkte Rang Team Jahr 6 756 1 Kings 2016 8 694 2 Riders 2016 2017 Punkte Rang Team Jahr 7 788 1 Kings 2017 11 690 2 Riders 2017
Standardmäßig sind die Namen der groupby-Objekte und der Gruppennamen identisch.
Mit dem get_group()-Verfahren können wir eine Gruppe auswählen.
# Importieren Sie die pandas-Bibliothek import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) grouped = df.groupby('Year') print(grouped.get_group(2014))
Die Ergebnisse des Laufens sind wie folgt:
Punkte Rang Team Jahr 0 876 1 Riders 2014 2 863 2 Devils 2014 4 741 3 Kings 2014 9 701 4 Royals 2014
Aggregationsfunktionen geben für jede Gruppe einen Aggregatswert zurück. Sobald ein Groups-Objekt erstellt wurde, können mehrere Aggregationsoperationen auf den gruppierten Daten ausgeführt werden.
Eine offensichtliche Methode ist die Verwendung von Summen oder einem äquivalenten agg-Verfahren.
# Importieren Sie die pandas-Bibliothek import pandas as pd import numpy as np ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) grouped = df.groupby('Year') print(grouped['Points'].agg(np.mean))
Die Ergebnisse des Laufens sind wie folgt:
Jahr 2014 795.25 2015 769.50 2016 725.00 2017 739.00 Name: Punkte, dtype: float64
Eine andere Möglichkeit, die Größe jedes Groups zu überprüfen, ist die Anwendung der size()-Funktion.
import pandas as pd import numpy as np ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) Attributzugriff in Python Pandas grouped = df.groupby('Team') print(grouped.agg(np.size))
Die Ergebnisse des Laufens sind wie folgt:
Punkte Rang Jahr Team Devils 2 2 2 Kings 3 3 3 Riders 4 4 4 Royals 2 2 2 kings 1 1 1
Mit der gruppierten Series können Sie auch Listen oder Wörterbücher von Funktionen anpassen, um Aggregationen durchzuführen und als DataFrame auszugeben-
# Importieren Sie die pandas-Bibliothek import pandas as pd import numpy as np ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) grouped = df.groupby('Team') print(grouped['Points'].agg([np.sum, np.mean, np.std]))
Die Ergebnisse des Laufens sind wie folgt:
Team Summe Durchschnitt Standardabweichung Devils 1536 768.000000 134.350288 Kings 2285 761.666667 24.006943 Riders 3049 762.250000 88.567771 Royals 1505 752.500000 72.831998 kings 812 812.000000 NaN
Eine Transformation auf dem Index oder den Spalten eines Groups oder Columns gibt einen Index zurück, der die Größe des zu gruppierenden Objekts entspricht. Daher sollte die Transformation ein Ergebnis mit der Größe des Gruppierungsblocks zurückgeben.
# Importieren Sie die pandas-Bibliothek import pandas as pd import numpy as np ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) grouped = df.groupby('Team') score = lambda x: (x - x.mean()) / x.std()*10 print(grouped.transform(score))
Die Ergebnisse des Laufens sind wie folgt:
Punkte Rang Jahr 0 12.843272 -15.000000 -11.618950 1 3.020286 5.000000 -3.872983 2 7.071068 -7.071068 -7.071068 3 -7.071068 7.071068 7.071068 4 -8.608621 11.547005 -10.910895 5 NaN NaN NaN 6 -2.360428 -5.773503 2.182179 7 10.969049 -5.773503 8.728716 8 -7.705963 5.000000 3.872983 9 -7.071068 7.071068 -7.071068 10 7.071068 -7.071068 7.071068 11 -8.157595 5.000000 11.618950
Filtern Sie Daten gemäß definierten Bedingungen, um einen Unterdatenbestand zurückzugeben. Die Filter() -Funktion wird verwendet, um Daten zu filtern.
import pandas as pd import numpy as np ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'], 'Rang': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2], 'Jahr': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Punkte':[876,789,863,673,741,812,756,788,694,701,804,690]}} df = pd.DataFrame(ipl_data) print(df.groupby('Team').filter(lambda x: len(x) >= 3))
Die Ergebnisse des Laufens sind wie folgt:
Punkte Rang Team Jahr 0 876 1 Riders 2014 1 789 2 Riders 2015 4 741 3 Kings 2014 6 756 1 Kings 2016 7 788 1 Kings 2017 8 694 2 Riders 2016 11 690 2 Riders 2017