1
resposta

Como transpor linhas e realizar um count

pessoal tenho uma base com essas info:

tenho números de contas repetidos com status diferentes:

NumeroIDDECISAOREGRA
01AUMENTOA
01RECUSAR
01RECUSAR

preciso que tenha essa saida contando quantas vezes esse ID apareceu

NumeroIDAUMENTORECUSA
0112
1 resposta

Olá, Michele! Tudo bom?

Desculpe pela demora em obter um retorno.

Como queremos coletar várias informações para um mesmo índice, precisaremos fazer um agrupamento de uma característica específica desses dados. Nesse caso, nós queremos a quantidade de ocorrências de cada elemento, ou seja, a contagem dos valores.

Utilizaremos a biblioteca Pandas no Python para realizar essa tarefa.

Definindo a nossa base de dados de exemplo, temos:

import pandas as pd
df = pd.DataFrame({"NumeroID": ["01", "01", "01", "02", "05"], 
                   "DECISAO": ["AUMENTO", "RECUSA", "RECUSA", "AUMENTO", "RECUSA"], 
                   "Regra": ["A", "R", "R", "A", "R"]})
df

Que no Jupyter Notebook retorna a seguinte saída:

NumeroIDDECISAORegra
001AUMENTOA
101RECUSAR
201RECUSAR
302AUMENTOA
405RECUSAR

No Pandas, temos o método pd.DataFrame.groupby() que trabalha com o agrupamento de dados, e o método pd.Series.value_counts() que retorna a quantidade de ocorrências de cada elemento. Utilizaremos uma variável df2 para armazenar o dataframe no novo formato requerido. A ideia é agrupar o df através da coluna NumeroID e extrair a contagem de valores da coluna DECISAO. O código para essa operação é:

df2 = df.groupby("NumeroID")["DECISAO"].value_counts()
df2

Que retorna a seguinte saída:

DECISAO
('01', 'RECUSA')2
('01', 'AUMENTO')1
('02', 'AUMENTO')1
('05', 'RECUSA')1

Para transformar essa Series em uma tabela com colunas AUMENTO e RECUSA, nós utilizaremos o método pd.DataFrame.unstack(), que faz o trabalho de "desempilhar" os valores no índice e transformar em um novo pd.DataFrame com as colunas baseadas nesses valores. Também utilizaremos um fillna(0) para preencher os valores que não foram registrados, como é o caso da contagem de AUMENTO no indice 05. O código para essa operaçao é:

df2 = df2.unstack("DECISAO").fillna(0)
df2

Que retorna a seguinte saída:

NumeroIDAUMENTORECUSA
0112
0210
0501

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!