Pandas Gruppierung und Aggregation

PandasBeginner
Jetzt üben

Einführung

Gruppieren und Aggregieren von Daten sind grundlegende Operationen in der Datenanalyse. Sie ermöglichen es Ihnen, einen großen Datensatz anhand bestimmter Kriterien in kleinere Gruppen aufzuteilen und dann zusammenfassende Statistiken für jede Gruppe zu berechnen. Dieser Prozess ist unerlässlich, um Muster aufzudecken, Segmente zu vergleichen und aussagekräftige Erkenntnisse aus Rohdaten zu gewinnen.

In der Python-Datenanalysebibliothek Pandas wird diese "Split-Apply-Combine"-Strategie hauptsächlich durch die leistungsstarke groupby()-Methode gehandhabt. In diesem Lab lernen Sie, wie Sie groupby() zum Gruppieren und Aggregieren verwenden. Sie beginnen damit, Daten nach einer einzelnen Spalte zu gruppieren, Aggregationsfunktionen anzuwenden, mehrere Funktionen gleichzeitig zu verwenden, nach mehreren Spalten zu gruppieren und schließlich die Ausgabe in einem Standard-DataFrame zu formatieren.

Gruppieren nach einer einzelnen Spalte mit groupby

In diesem Schritt lernen Sie die grundlegende Verwendung der groupby()-Methode, um einen DataFrame in Gruppen aufzuteilen. Die groupby()-Methode selbst berechnet nichts, sondern gibt ein DataFrameGroupBy-Objekt zurück. Dieses Objekt enthält alle Informationen, die benötigt werden, um anschließend Berechnungen für jede Gruppe anzuwenden.

Zuerst gruppieren wir unseren Beispiel-DataFrame nach der Spalte Category. Dies erstellt separate Gruppen für 'Electronics', 'Clothing' und 'Books'.

Öffnen Sie die Datei main.py im Editor auf der linken Seite. Der anfängliche Code zur Erstellung eines DataFrames ist bereits vorhanden. Fügen Sie den folgenden Code am Ende der Datei main.py hinzu:

## Group by the 'Category' column
grouped_by_category = df.groupby('Category')

## The result is a DataFrameGroupBy object
print("Type of the grouped object:")
print(type(grouped_by_category))

## To see the contents, you can iterate over the groups
print("\nIterating over groups to see their content:")
for name, group in grouped_by_category:
    print(f"\nGroup: {name}")
    print(group)

Führen Sie nun das Skript im Terminal aus, um die Ausgabe zu sehen.

python3 main.py

Sie sehen den ursprünglichen DataFrame, gefolgt vom Typ des groupby-Objekts und dann dem Inhalt jeder Gruppe. Dies zeigt, dass der DataFrame erfolgreich basierend auf den eindeutigen Werten in der Spalte 'Category' aufgeteilt wurde.

Original DataFrame:
      Category Region  Sales  Units
0  Electronics  North   1200     10
1     Clothing  South    800     25
2  Electronics  North   1500      8
3        Books   West    300     15
4     Clothing   East    900     20
5        Books   West    450     18

==============================

Type of the grouped object:
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>

Iterating over groups to see their content:

Group: Books
  Category Region  Sales  Units
3    Books   West    300     15
5    Books   West    450     18

Group: Clothing
   Category Region  Sales  Units
1  Clothing  South    800     25
4  Clothing   East    900     20

Group: Electronics
      Category Region  Sales  Units
0  Electronics  North   1200     10
2  Electronics  North   1500      8

Summenaggregation auf Gruppen anwenden

In diesem Schritt lernen Sie, wie Sie eine Aggregationsfunktion auf die von Ihnen erstellten Gruppen anwenden. Nachdem die Daten gruppiert wurden, ist der häufigste nächste Schritt, eine Berechnung wie sum(), mean(), count() oder max() für jede Gruppe durchzuführen.

Berechnen wir den Gesamtumsatz für jede Produktkategorie. Dazu gruppieren Sie zuerst nach Category und wählen dann die Spalte Sales aus, um die Funktion sum() anzuwenden.

Fügen Sie den folgenden Code am Ende Ihrer Datei main.py hinzu. Sie können die for-Schleife aus dem vorherigen Schritt entfernen, um die Ausgabe übersichtlich zu halten.

## Group by 'Category' and calculate the sum of 'Sales' for each group
category_sales_sum = df.groupby('Category')['Sales'].sum()

print("Total sales per category:")
print(category_sales_sum)

Speichern Sie die Datei und führen Sie sie erneut aus.

python3 main.py

Die Ausgabe zeigt nun eine Pandas Series, bei der der Index der Kategoriename und die Werte der Gesamtumsatz für diese Kategorie sind.

... (previous output) ...

Total sales per category:
Category
Books           750
Clothing       1700
Electronics    2700
Name: Sales, dtype: int64

Dies ist eine leistungsstarke und prägnante Methode, um Ihre Daten zusammenzufassen. Sie können die gleiche Logik auf andere numerische Spalten anwenden oder andere Aggregationsfunktionen wie mean() verwenden, um den Durchschnitt zu ermitteln.

Mehrere Funktionen mit agg aggregieren

In diesem Schritt lernen Sie, wie Sie mit der agg()-Methode mehrere Aggregationsfunktionen gleichzeitig auf Ihre Gruppen anwenden. Dies ist sehr nützlich, wenn Sie mehrere zusammenfassende Statistiken auf einmal berechnen möchten, wie z. B. sowohl den Gesamtumsatz als auch den Durchschnittsumsatz.

An die agg()-Methode kann eine Liste von Zeichenketten übergeben werden, wobei jede Zeichenkette der Name einer Aggregationsfunktion ist. Berechnen wir sowohl die sum als auch den mean von Sales für jede Category.

Fügen Sie den folgenden Code am Ende Ihrer Datei main.py hinzu:

## Group by 'Category' and apply multiple aggregations on 'Sales'
category_agg = df.groupby('Category')['Sales'].agg(['sum', 'mean'])

print("\nSum and mean of sales per category:")
print(category_agg)

Speichern Sie die Datei und führen Sie sie aus.

python3 main.py

Die Ausgabe ist nun ein DataFrame. Der Index ist immer noch die Category, aber die Spalten sind hierarchisch und zeigen sowohl sum als auch mean für die Sales-Daten.

... (previous output) ...

Sum and mean of sales per category:
              sum    mean
Category
Books         750   375.0
Clothing     1700   850.0
Electronics  2700  1350.0

Die agg()-Methode bietet eine flexible Möglichkeit, umfassende Zusammenfassungen Ihrer gruppierten Daten zu erstellen.

Nach mehreren Spalten gruppieren

In diesem Schritt lernen Sie, wie Sie einen DataFrame nach mehr als einer Spalte gruppieren. Dies ist nützlich, um granularere Gruppen zu erstellen und Wechselwirkungen zwischen verschiedenen Kategorien zu analysieren. Dazu übergeben Sie einfach eine Liste von Spaltennamen an die groupby()-Methode.

Ermitteln wir den Gesamtumsatz für jede Kombination aus Region und Category. Dies zeigt uns, wie sich die Umsätze verschiedener Produktkategorien über die Regionen verteilen.

Fügen Sie den folgenden Code am Ende Ihrer Datei main.py hinzu:

## Group by multiple columns: 'Region' and 'Category'
multi_group_sum = df.groupby(['Region', 'Category'])['Sales'].sum()

print("\nTotal sales per Region and Category:")
print(multi_group_sum)

Speichern Sie die Datei und führen Sie das Skript aus.

python3 main.py

Die Ausgabe hat nun einen MultiIndex in den Zeilen, wobei die erste Ebene Region und die zweite Ebene Category ist. Dies bietet eine detaillierte Aufschlüsselung der Umsätze.

... (previous output) ...

Total sales per Region and Category:
Region  Category
East    Clothing        900
North   Electronics    2700
South   Clothing        800
West    Books           750
Name: Sales, dtype: int64

Wie Sie sehen können, ermöglicht die Gruppierung nach mehreren Spalten eine tiefere und hierarchischere Analyse Ihres Datensatzes.

Index auf gruppiertem DataFrame zurücksetzen

In diesem Schritt lernen Sie, wie Sie die gruppierte Ausgabe zurück in einen regulären DataFrame konvertieren, bei dem die Gruppierungsschlüssel Spalten und kein Index sind. Standardmäßig macht groupby() die Gruppierungsschlüssel zum Index der resultierenden Series oder des DataFrames. Manchmal möchten Sie einen "flachen" DataFrame für weitere Verarbeitung oder Visualisierung.

Der einfachste Weg, dies zu erreichen, ist die Verwendung des Parameters as_index=False innerhalb der groupby()-Methode.

Wiederholen wir die Gruppierung nach einer einzelnen Spalte aus Schritt 2, aber diesmal behalten wir Category als reguläre Spalte bei.

Fügen Sie den folgenden Code am Ende Ihrer Datei main.py hinzu:

## Group by 'Category' and aggregate, but keep 'Category' as a column
category_sales_flat = df.groupby('Category', as_index=False)['Sales'].sum()

print("\nGrouped data with 'Category' as a column:")
print(category_sales_flat)

Speichern Sie die Datei und führen Sie sie ein letztes Mal aus.

python3 main.py

Beobachten Sie die Ausgabe. Anstatt dass Category der Index ist, ist es nun die erste Spalte eines neuen DataFrames, und der DataFrame hat einen Standard-Integer-Index (0, 1, 2).

... (previous output) ...

Grouped data with 'Category' as a column:
      Category  Sales
0        Books    750
1     Clothing   1700
2  Electronics   2700

Dieses Format ist oft bequemer für nachfolgende Datenmanipulationsaufgaben. Eine alternative Methode ist, .reset_index() auf dem gruppierten Ergebnis aufzurufen, was das gleiche Ergebnis erzielt.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs zu Pandas-Gruppierung und -Aggregation! Sie haben eine der mächtigsten und am häufigsten verwendeten Funktionen der Pandas-Bibliothek für die Datenanalyse gelernt.

In diesem Lab haben Sie Folgendes geübt:

  • Aufteilen eines DataFrames in Gruppen mit df.groupby('column_name').
  • Anwenden einer einzelnen Aggregationsfunktion wie .sum() auf die Gruppen.
  • Verwenden der .agg()-Methode, um mehrere Aggregationsfunktionen gleichzeitig anzuwenden.
  • Gruppieren nach mehreren Spalten, um eine hierarchische Zusammenfassung mit df.groupby(['col1', 'col2']) zu erstellen.
  • Erstellen eines flachen DataFrames aus einer groupby-Operation durch Verwendung des Parameters as_index=False.

Die Beherrschung dieser Techniken ist ein entscheidender Schritt, um in der Datenmanipulation und -analyse mit Python und Pandas versiert zu werden.