3
respostas

Criando Variável: condicionada à uma lista

Boa tarde!

Fiz um exercício e não consigo solucionar ele.

Digamos que tenho um Data Frame financeiro completo (df). E nela queira criar uma variável (mais uma coluna) onde será determinado se um código contábil é uma conta de provisão ou não.

Já tenho um banco de dados que lista as contas contábeis que são consideradas de 'provisão'.

prov = pd.DataFrame({'CodRdz':[30006, 30016,30017,30018,30110,30019,30022,30024,30025,30023,30026,30106,30107]})

Sendo 'df' meu Data frame completo e df['Provisao'] a variável nova que quero criar. Escrevi a seguinte linha:

df['Provisao']= df['CodRdz'].apply(lambda x: "Provisao" if prov[prov['CodRdz']==x].values[0]==x else "")

Ela me retornou um erro:

~\AppData\Local\Temp/ipykernel_17156/1769572042.py in <lambda>(x)
      2 
      3 
----> 4 df['Provisao']= df['CodRdz'].apply(lambda x: "Provisao" if prov[prov['CodRdz']==x]['CodRdz'] .values[0]==x else "")
      5 
      6 # df['Provisao']= df['CodRdz'].apply(lambda x: "Provisao" if True else "")

IndexError: index 0 is out of bounds for axis 0 with size 0

Se pudessem me mostar o erro agraderia. E tbm se houver outro tipo de solução mais eficiente, seria interessante tbm!

3 respostas

Achei o erro.

na Fórmula:

df['Provisao']= df['CodRdz'].apply(lambda x: "Provisao" if prov[prov['CodRdz']==x].values[0]==x else "")

na parte:

prov['CodRdz']==x

Retornará falso em alguns resultados, pois a lista prov['CodRdz'] não possui todas contas contábeis. E fazendo uma seleção de um FALSO dará um resultado vazio mesmo: prov[ False ] == x]

prov[prov['CodRdz']==x]

Ainda assim não consegui resolver meu problema.

Consegui uma solução. Mas gostaria de saber se não há uma outra forma mais eficiente.

prov = pd.DataFrame({'CodRdz':[30006, 30016,30017,30018,30110,30019,30022,30024,30025,30023,30026,30106,30107]})


# Verificar se o df['CodRdz'] está em prov['CodRdz'] : 0=não, 1=sim
# prov[prov['CodRdz']== x].shape[0]


df['Provisao']= df['CodRdz'].apply(lambda x:  "Provisao" 
                                   if (prov[prov['CodRdz']== x].shape[0]!=0 )
                                        else "")

Oi, Flávio! Tudo bem com você?

A solução está correta, parabéns por ter encontrado uma solução bacana e compartilhado ela aqui no fórum, tenho certeza que vai ajudar muitos alunos e alunas!

Bons estudos!