Pandas Conteggio per gruppo
-
Contare il valore dei valori di riga univoci utilizzando il metodo
Series.value_counts()
-
Contare i valori dei gruppi DataFrame utilizzando la funzione
DataFrame.groupby()
-
Ottieni più valori statistici di ogni gruppo utilizzando il metodo
pandas.DataFrame.agg()
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.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn