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:
| NumeroID | DECISAO | Regra |
---|
0 | 01 | AUMENTO | A |
1 | 01 | RECUSA | R |
2 | 01 | RECUSA | R |
3 | 02 | AUMENTO | A |
4 | 05 | RECUSA | R |
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:
NumeroID | AUMENTO | RECUSA |
---|
01 | 1 | 2 |
02 | 1 | 0 |
05 | 0 | 1 |
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!