[Erklärt] Wie man ein DataFrame in Python, Pandas, PySpark gruppieren kann
Updated on
Das Gruppieren von Daten ist ein wesentlicher Bestandteil der Datenanalyse, sei es zum Berechnen von Aggregaten oder zum Anwenden komplexer Transformationen. Die Funktion groupby
von Pandas in Python ist ein robustes und vielseitiges Werkzeug, das es ermöglicht, solche Operationen effizient durchzuführen. Mit ihrer umfangreichen Funktionalität vereinfacht sie den Prozess der Manipulation von gruppierten Daten auf Basis bestimmter Bedingungen und macht die Datenanalyse zu einer viel reibungsloseren Aufgabe.
Die Funktion groupby
von Pandas ist besonders leistungsstark, wenn es um die Bearbeitung großer DataFrames geht, dank ihrer optimierten Implementierung. Durch Nutzung von groupby
für DataFrames in Pandas kann man nach einzelnen oder mehreren Spalten gruppieren, mehrere Aggregatfunktionen anwenden und sogar fortgeschrittene Aufgaben wie Filtern und Sortieren der gruppierten Daten durchführen. Dieser Leitfaden zielt darauf ab, die Leistungsfähigkeit der Funktion groupby
von Pandas zu enthüllen und bietet Einblicke, bewährte Methoden und praktische Beispiele.
Möchten Sie schnell Datenvisualisierungen aus Python Pandas DataFrame ohne Code erstellen?
PyGWalker ist eine Python-Bibliothek für explorative Datenanalyse mit Visualisierung. Mit PyGWalker (opens in a new tab) können Sie Ihren Jupyter Notebook-Analyse- und Visualisierungsworkflow mit Datenrahmen (sowie Polars-Datenrahmen) in eine Tableau-ähnliche Benutzeroberfläche für visuelle Exploration umwandeln.
Verständnis von Pandas GroupBy
Einfach ausgedrückt besteht die groupby
-Operation von Pandas darin, die Daten basierend auf bestimmten Kriterien in Gruppen aufzuteilen, eine Funktion auf jede Gruppe anzuwenden und dann die Ergebnisse zu kombinieren. Dieser Prozess wird auch als "Split-Apply-Combine"-Strategie bezeichnet, ein Begriff, der von der Bibliothek Pandas selbst geprägt wurde.
Die Funktion groupby
in Pandas verwendet ein ähnliches Konzept wie die SQL-GROUP BY
-Anweisung, was den Übergang von SQL zu Python für die Datenanalyse erleichtert.
Hier ist ein grundlegendes Beispiel dafür, wie man groupby
mit einem Pandas DataFrame verwenden kann:
import pandas as pd
## Erstellen eines Beispieldatenrahmens
data = {
'Name': ['John', 'Anna', 'John', 'Anna', 'John', 'Anna'],
'Subject': ['Maths', 'Maths', 'Physics', 'Physics', 'Chemistry', 'Chemistry'],
'Score': [85, 90, 78, 88, 92, 95]
}
df = pd.DataFrame(data)
## Anwenden von groupby
grouped = df.groupby('Name')
for name, group in grouped:
print("\n", name)
print(group)
Gruppieren nach mehreren Spalten
Neben der Gruppierung nach einer einzelnen Spalte unterstützt groupby
von Pandas auch die Gruppierung nach mehreren Spalten. Dies ist besonders nützlich, wenn Sie Ihre Daten basierend auf mehreren Attributen kategorisieren möchten. Erweitern wir das vorherige Beispiel und führen eine groupby
-Operation mit mehreren Spalten durch:
## Anwenden von groupby auf mehrere Spalten
grouped_multiple = df.groupby(['Name', 'Subject'])
for (name, subject), group in grouped_multiple:
print("\n", name, subject)
print(group)
Wie Sie sehen können, hat groupby
den Datensatz zunächst nach 'Name' und dann nach 'Subject' innerhalb jeder 'Name'-Gruppe gruppiert. Diese Art der Gruppierung ermöglicht komplexe Datenanalyseoperationen.
Aggregatfunktionen mit Pandas GroupBy
Ein großer Vorteil von groupby
in Pandas ist, dass es uns ermöglicht, Aggregatfunktionen auf die gruppierten Daten anzuwenden. Zu den gängigen Aggregatfunktionen gehören sum
, mean
, count
, max
und min
. Hier ist ein Beispiel für die Verwendung von groupby
und sum
in Pandas:
## Verwendung von sum mit groupby
grouped_sum = df.groupby('Name')['Score'].sum()
print(grouped_sum)
In diesem Beispiel summieren wir die Punkte jedes Schülers. Beachten Sie, dass wir den Spaltenindexer (['Score']
) direkt nach groupby
verwendet haben. Das liegt daran, dass die sum
-Funktion nur auf numerische Daten angewendet werden kann. Daher müssen wir die Spalte 'Score' auswählen, um die sum
-Funktion anzuwenden.
Daten mit Pandas GroupBy sortieren
Es ist üblich, Daten nach einer Gruppierung zu sortieren. Sie möchten beispielsweise die Gruppen nach ihren aggregierten Werten sortieren. So können Sie groupby
und Sortieren in Pandas verwenden:
## Sortieren der Daten nach groupby
grouped_sorted = df.groupby('Name')['Score'].sum().sort_values(ascending=False)
print(grouped_sorted)
In diesem Beispiel haben wir den DataFrame zunächst nach 'Name' gruppiert, dann die 'Score' für jede Gruppe summiert und schließlich die Gruppen nach der Summe der 'Score' in absteigender Reihenfolge sortiert.
Benutzerdefinierte Aggregation mit GroupBy Apply
Mit groupby
in Pandas können Sie benutzerdefinierte Aggregationen mithilfe der apply
-Funktion durchführen. Dies kann nützlich sein, wenn die integrierten Aggregatfunktionen nicht ausreichen. Angenommen, Sie möchten den Bereich (Maximum - Minimum) der Punkte für jeden Schüler berechnen. Sie können groupby apply
in Pandas wie folgt verwenden:
## Benutzerdefinierte Aggregation mit groupby apply
grouped_apply = df.groupby('Name')['Score'].apply(lambda x: x.max() - x.min())
print(grouped_apply)
In diesem Beispiel berechnen wir für jede Gruppe den Bereich der 'Score' mit einer Lambda-Funktion und wenden diese Funktion auf jede Gruppe mit apply
an.
Unterschied zwischen GroupBy und Pivot in Pandas
Sowohl groupby
als auch die Pivot-Tabelle sind leistungsstarke Werkzeuge zur Zusammenfassung von Daten, haben aber unterschiedliche Zwecke und werden in unterschiedlichen Kontexten eingesetzt. Zur Veranschaulichung, groupby
wird verwendet, wenn Sie Ihre Daten basierend auf einer Kategorie zusammenfassen möchten, während die Pivot-Tabelle verwendet wird, um Ihre Daten umzuformen.
In einer pandas groupby
-Operation geben Sie eine oder mehrere Spalten an, nach denen gruppiert werden soll, und geben dann eine Aggregatfunktion an, die auf jede Gruppe angewendet werden soll. Auf der anderen Seite nimmt eine Pivot-Tabelle einfache, spaltenweise Daten als Eingabe und gruppiert die Einträge in eine zweidimensionale Tabelle, die eine multidimensionale Analyse ermöglicht.
GroupBy von nicht-numerischen Daten in Pandas
Es ist tatsächlich möglich, "groupby von nicht-numerischen Daten in Pandas" durchzuführen. Obwohl Aggregatfunktionen wie sum
und mean
nicht auf nicht-numerische Daten angewendet werden können, gibt es viele Operationen, die Sie auf nicht-numerische Daten durchführen können. Zum Beispiel können Sie die Anzahl der Vorkommnisse jeder Kategorie zählen oder eine Funktion anwenden, die in Bezug auf den Datentyp der nicht-numerischen Spalte sinnvoll ist.
## Groupby von nicht-numerischen Daten und Zählen
grouped_count = df.groupby('Name')['Subject'].count()
print(grouped_count)
In diesem Beispiel zählen wir die Anzahl der Fächer, die jeder Schüler hat, indem wir nach 'Name' gruppieren und 'Subject' zählen.
GroupBy mit PySpark
Das Konzept von groupby
erstreckt sich auch auf Big-Data-Frameworks wie PySpark. Obwohl die Syntax geringfügig abweicht, bleibt die Idee die gleiche: Die Daten in Gruppen aufteilen und eine Funktion auf jede Gruppe anwenden.
## GroupBy in PySpark
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
## Daten in PySpark DataFrame laden
df_pyspark = spark.createDataFrame(df)
## GroupBy in PySpark
df_pyspark.groupby('Name').agg({'Score': 'sum'}).show()
In PySpark müssen Sie die agg
-Funktion verwenden, um nach der Gruppierung eine Aggregatfunktion anzuwenden. Im obigen Beispiel gruppieren wir nach 'Name' und summieren den 'Score' für jede Gruppe.
Wenn Sie tiefer in die Welt der Datenanalyse mit Python eintauchen, werden Sie feststellen, dass pandas DataFrame groupby
ein zuverlässiger Begleiter ist. Mit seiner Flexibilität und Leistung können Sie Daten auf eine Weise verarbeiten und erkunden, die zuvor nur Personen mit Kenntnissen in Programmierung oder Statistik zur Verfügung stand. Tauchen Sie ein, experimentieren Sie mit den verschiedenen Funktionen und beobachten Sie, wie Ihre Daten wertvolle Erkenntnisse liefern!
FAQs
- Was ist der Unterschied zwischen
groupby
und Pivot in Pandas?
Pandas groupby
wird verwendet, um Daten basierend auf einer Kategorie zusammenzufassen, während eine Pivot-Tabelle Daten in eine zweidimensionale Tabelle umwandelt, um eine multidimensionale Analyse durchzuführen.
- Kann ich
groupby
auf nicht-numerische Daten in Pandas anwenden?
Ja, Sie können groupby
auf nicht-numerische Daten in Pandas anwenden. Während Sie keine Aggregatfunktionen wie sum
oder mean
auf nicht-numerische Daten anwenden können, gibt es viele Operationen, die Sie durchführen können, wie z.B. das Zählen der Anzahl der Vorkommnisse jeder Kategorie.
- Wie verwende ich
groupby
mit PySpark?
Das Konzept von groupby
ist in PySpark ähnlich wie in Pandas. Nach der Gruppierung müssen Sie in PySpark die agg
-Funktion verwenden, um eine Aggregatfunktion auf jede Gruppe anzuwenden.