Pandas Conteggio per gruppo

Suraj Joshi 30 gennaio 2023
  1. Contare il valore dei valori di riga univoci utilizzando il metodo Series.value_counts()
  2. Contare i valori dei gruppi DataFrame utilizzando la funzione DataFrame.groupby()
  3. Ottieni più valori statistici di ogni gruppo utilizzando il metodo pandas.DataFrame.agg()
Pandas Conteggio per gruppo

Questo tutorial spiega come possiamo ottenere statistiche come count, sum, max e molto altro per i gruppi derivati ​​usando il metodo DataFrame.groupby().

Useremo automobile_data_df mostrato nell’esempio sopra per spiegare i concetti. Il DataFrame è composto dai dipendenti e dai marchi di auto e biciclette da loro utilizzati.

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)

Produzione:

          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

Contare il valore dei valori di riga univoci utilizzando il metodo Series.value_counts()

Se vogliamo il conteggio di ogni valore univoco di una singola colonna in un DataFrame, possiamo usare il metodo Series.value_counts().

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())

Produzione:

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

Stamperà tutti i valori univoci nella colonna Car Brand di automobile_data_df insieme ai loro conteggi. Il metodo è applicabile solo se vogliamo vedere i conteggi dei valori di una sola colonna alla volta.

Contare i valori dei gruppi DataFrame utilizzando la funzione DataFrame.groupby()

Usiamo la funzione DataFrame.groupby() per dividere un DataFrame in più gruppi e poi usiamo il metodo size() per contare i valori di ogni gruppo creato.

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"))

Produzione:

    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

Stampa un DatFrame con tutte le combinazioni univoche dei valori delle colonne Car Brand e Motorbike Brand da automobile_data_df insieme al conteggio delle occorrenze di queste combinazioni nel automobile_data_df DataFrame.

Il metodo groupby() divide automobile_data_df in gruppi. Le righe con gli stessi valori delle colonne Car Brand e Motorbike Brand verranno inserite nello stesso gruppo. Il metodo size() darà il conteggio dei valori in ogni gruppo e infine genereremo DataFrame dal conteggio dei valori in ogni gruppo.

Ottieni più valori statistici di ogni gruppo utilizzando il metodo pandas.DataFrame.agg()

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]}))

Produzione:

                           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

Visualizza il minimo, il massimo e la somma dei valori di Monthly Salary per ciascun gruppo generato.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Articolo correlato - Pandas Groupby