Pandas Groupby Contagem
-
Contagem de valores únicos de linha utilizando
Série.valor_contas()
Método -
Contagem de valores de grupos DataFrame utilizando
DataFrame.groupby()
Função -
Obter múltiplos valores estatísticos de cada grupo utilizando
pandas.DataFrame.agg()
Método
Este tutorial explica como podemos obter estatísticas como count
, sum
, max
e muito mais para grupos derivados utilizando o método DataFrame.groupby()
.
Vamos utilizar o automobile_data_df
mostrado no exemplo acima para explicar os conceitos. O DataFrame consiste em empregados, e as marcas de carros e bicicletas por eles utilizadas.
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)
Resultado:
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
Contagem de valores únicos de linha utilizando Série.valor_contas()
Método
Se quisermos contagens de cada valor único de uma única coluna num DataFrame, podemos utilizar o método 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())
Resultado:
Toyota 3
Volkswagen 2
Cherlovet 1
Chevrolet 1
Name: Car Brand, dtype: int64
Irá imprimir todos os valores únicos na coluna Car Brand
de automobile_data_df
juntamente com as suas contagens. O método só é aplicável se quisermos ver as contagens de valores de apenas uma coluna de cada vez.
Contagem de valores de grupos DataFrame utilizando DataFrame.groupby()
Função
Utilizamos a função DataFrame.groupby()
para dividir um DataFrame em vários grupos e depois utilizar o método size()
para contar os valores de cada grupo criado.
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"))
Resultado:
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
Imprime um DataFrame com todas as combinações únicas de valores de Car Brand
e Motorbike Brand
das colunas automobile_data_df
juntamente com a contagem das ocorrências destas combinações no automobile_data_df
DataFrame.
O método groupby()
divide o automobile_data_df
em grupos. As linhas com os mesmos valores das colunas Car Brand
e Motorbike Brand
serão colocadas no mesmo grupo. O método size()
dará a contagem dos valores em cada grupo e finalmente geramos DataFrame a partir da contagem dos valores em cada grupo.
Obter múltiplos valores estatísticos de cada grupo utilizando pandas.DataFrame.agg()
Método
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]}))
Resultado:
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
Apresenta os valores mínimo, máximo, e soma de Monthly Salary
para cada grupo gerado.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn