Pandas Groupby-Zählung

Suraj Joshi 30 Januar 2023
  1. Zählen der eindeutigen Zeilenwerte mit der Methode Series.value_counts()
  2. Zählen der Werte von DataFrame-Gruppen mit der Funktion DataFrame.groupby()
  3. Mehrere Statistikwerte jeder Gruppe mit der Methode pandas.DataFrame.agg() ermitteln
Pandas Groupby-Zählung

Dieses Tutorial erklärt, wie wir Statistiken wie count, sum, max und vieles mehr für Gruppen erhalten können, die mit der Methode DataFrame.groupby() abgeleitet wurden.

Wir werden das im obigen Beispiel gezeigte automobile_data_df verwenden, um die Konzepte zu erklären. Der DataFrame besteht aus Mitarbeitern und den von ihnen verwendeten Auto- und Fahrradmarken.

import pandas as pd

automobile_data = [
    ["Chevrolet", "Yamaha"],
    ["Toyota", "Ducati"],
    ["Volkswagen", "BMW"],
    ["Cherlovet", "Kawasaki"],
    ["Toyota", "Ducati"],
    ["Toyota", "BMW"],
    ["Volkswagen", "BMW"],
]

column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names
)
print(automobile_data_df)

Ausgabe

          Car Brand Motorbike Brand
Steven    Chevrolet          Yamaha
Robert       Toyota          Ducati
Jimmy    Volkswagen             BMW
Mike      Cherlovet        Kawasaki
Phoenix      Toyota          Ducati
Scott        Toyota             BMW
John     Volkswagen             BMW

Zählen der eindeutigen Zeilenwerte mit der Methode Series.value_counts()

Wenn wir die Anzahl der eindeutigen Werte einer einzelnen Spalte in einem DataFrame ausgeben möchten, können wir die Methode Series.value_counts() verwenden.

import pandas as pd

automobile_data = [
    ["Chevrolet", "Yamaha"],
    ["Toyota", "Ducati"],
    ["Volkswagen", "BMW"],
    ["Cherlovet", "Kawasaki"],
    ["Toyota", "Ducati"],
    ["Toyota", "BMW"],
    ["Volkswagen", "BMW"],
]

column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names
)

print(automobile_data_df["Car Brand"].value_counts())

Ausgabe:

Toyota        3
Volkswagen    2
Cherlovet     1
Chevrolet     1
Name: Car Brand, dtype: int64

Sie gibt alle eindeutigen Werte in der Spalte Car Brand von automobile_data_df zusammen mit ihrer Anzahl aus. Die Methode ist nur anwendbar, wenn wir die Anzahl der Werte nur einer Spalte auf einmal sehen wollen.

Zählen der Werte von DataFrame-Gruppen mit der Funktion DataFrame.groupby()

Wir verwenden die Funktion DataFrame.groupby(), um einen DataFrame in mehrere Gruppen aufzuteilen und verwenden dann die Methode size(), um die Werte jeder erstellten Gruppe zu zählen.

import pandas as pd

automobile_data = [
    ["Chevrolet", "Yamaha"],
    ["Toyota", "Ducati"],
    ["Volkswagen", "BMW"],
    ["Cherlovet", "Kawasaki"],
    ["Toyota", "Ducati"],
    ["Toyota", "BMW"],
    ["Volkswagen", "BMW"],
]

column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names
)

group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])
print(group.size().reset_index(name="counts"))

Ausgabe:

    Car Brand Motorbike Brand  counts
0   Cherlovet        Kawasaki       1
1   Chevrolet          Yamaha       1
2      Toyota             BMW       1
3      Toyota          Ducati       2
4  Volkswagen             BMW       2

Es wird ein DatFrame mit allen eindeutigen Kombinationen von Werten der Spalten Car Brand und Motorbike Brand aus dem automobile_data_df zusammen mit der Anzahl der Vorkommen dieser Kombinationen im automobile_data_df DataFrame ausgegeben.

Die Methode groupby() teilt die automobile_data_df in Gruppen auf. Die Zeilen mit den gleichen Werten der Spalten Car Brand und Motorbike Brand werden in die gleiche Gruppe eingeordnet. Die Methode size() liefert die Anzahl der Werte in jeder Gruppe und schließlich erzeugen wir einen DataFrame aus der Anzahl der Werte in jeder Gruppe.

Mehrere Statistikwerte jeder Gruppe mit der Methode pandas.DataFrame.agg() ermitteln

import pandas as pd

automobile_data = [
    ["Chevrolet", "Yamaha", 4000],
    ["Toyota", "Ducati", 5000],
    ["Volkswagen", "BMW", 4500],
    ["Cherlovet", "Kawasaki", 3800],
    ["Toyota", "Ducati", 4500],
    ["Toyota", "BMW", 5000],
    ["Volkswagen", "BMW", 6000],
]

column_names = ["Car Brand", "Motorbike Brand", "Monthly Salary"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names
)

group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])

print(group.agg({"Monthly Salary": [min, max, sum]}))

Ausgabe:

                           Monthly Salary             
                                      min   max    sum
Car Brand  Motorbike Brand                            
Cherlovet  Kawasaki                  3800  3800   3800
Chevrolet  Yamaha                    4000  4000   4000
Toyota     BMW                       5000  5000   5000
           Ducati                    4500  5000   9500
Volkswagen BMW                       4500  6000  10500

Es werden das Minimum, das Maximum und die Summe der Werte des Monthly Salary für jede generierte Gruppe angezeigt.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Pandas Groupby