Pandas Groupby Contagem

Suraj Joshi 30 janeiro 2023
  1. Contagem de valores únicos de linha utilizando Série.valor_contas() Método
  2. Contagem de valores de grupos DataFrame utilizando DataFrame.groupby() Função
  3. Obter múltiplos valores estatísticos de cada grupo utilizando pandas.DataFrame.agg() Método
Pandas Groupby Contagem

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 avatar Suraj Joshi avatar

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

LinkedIn

Artigo relacionado - Pandas Groupby