1
resposta

Contagem de Elementos de um DataFrame

Olá, estou com uma dúvida e gostaria de saber se alguem poderia me dar uma luz quanto a ela....

Digamos que eu tenha um DataFrame da seguinte forma:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
                    'A': ['a', 'b', 'c', 'd', 'e'],
                    'B': ['e', 'd', 'c', 'b', 'a'],
                    'C': ['a', 'e', 'b', 'd', 'c'],
                    'D': ['i', 'h', 'g', 'f', 'e'],
                    })
df1

Eu gostaria de realizar uma contagem - ao estilo que fazemos com o groupby - mas gostaria de fazer com todas as colunas ao mesmo tempo de forma que o novo index fosse composto pelos valores unicos das colunas do DataFrame... Resultando no seguinte DataFrame:

df2 = pd.DataFrame({
                    'A': [1, 1, 1, 1, 1, 0, 0, 0, 0],
                    'B': [1, 1, 1, 1, 1, 0, 0, 0, 0],
                    'C': [1, 1, 1, 1, 1, 0, 0, 0, 0],
                    'D': [0, 0, 0, 0, 1, 1, 1, 1, 1],
                    }, index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
df2

Com o groupby só sei fazer de cada coluna.... Nesse estilo:

df1.groupby('A').A.count()

Gostaria de saber se alguem tem uma solução para isso

1 resposta

Oii Henrique! Como você está?

Uma forma de fazer isso, seria a seguinte:

nome_dos_indices = list(np.unique(df1.values)) # pegando os valores únicos do dataframe
valores_do_novo_dataframe = [] # criando uma lista

# percorrendo as colunas
for nome_coluna in df1.columns: 
  valores_iniciais = dict.fromkeys(nome_dos_indices, 0) # criando um dicionário com todos os valores únicos como chave e 0 como valor
  agrupamento = df1.groupby(nome_coluna) # agrupando os dados de acordo com a coluna
  contagem = dict(agrupamento[nome_coluna].count()) # criando um dicionário com o agrupamento
  valores_iniciais.update(contagem) # atualizando os valores do dicionário valores_iniciais com os valores do agrupamento
  valores_do_novo_dataframe.append(valores_iniciais) # salvando o dicionário na lista valores_do_novo_dataframe

# criando um dataframe com os resultados da lista
df2 = pd.DataFrame(data=valores_do_novo_dataframe).T
df2.columns = ['A', 'B', 'C', 'D']
df2

O código está com comentários explicando as partes principais.

Mas, de modo geral, fazemos um laço for para percorrer os nomes das colunas do dataframe, e, para cada coluna é criado um dicionário com os valores únicos do dataframe (a, b, c, d, e, f). Em seguida, utilizando o groupby e o count é realizado o agrupamento e a contagem dos elementos de cada coluna e por meio do método update o dicionário com os valores únicos do dataframe é atualizado para ter os valores dessa contagem.

Após isso, esse dicionário é salvo em uma lista. E, depois que esse processo é realizado para cada uma das colunas, fazemos um dataframe com essa lista.

Espero que tenha ajudado. Qualquer dúvida estou por aqui :)

Bons estudos!