Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Criação de variável condicionada a outras

Boa tarde pessoal, td bem?

Estou tentando criar uma nova variável mas condicionada à duas variáveis (ou colunas).

Criei esse Data Frame simples:

bd = {'R_D': ['R', 'D', 'R', 'D','R','D','D','D'],
      'Valores': [80,10,40,23,79,12,34,21] }

Sendo 'R' igual a receita e 'D' igual a despesa. Gostaria de criar uma nova coluna Valores_2, onde eu possa ter valores positivos para 'R' e valores negativos para 'D'.

Vcs podem me ajudar?

3 respostas
solução!

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

Existem algumas formas para obter esse resultado esperado por você, vou mostrar uma delas aqui e se não for exatamente o que você procura nos retorne por aqui mesmo, ok?

  • Criando DataFrame com base no seu conjunto de dados:
import pandas as pd

bd = {'R_D': ['R', 'D', 'R', 'D','R','D','D','D'],
      'Valores': [80,10,40,23,79,12,34,21] }


dataframe = pd.DataFrame(bd)
dataframe

Saída:

R_DValores
0R80
1D10
2R40
3D23
4R79
5D12
6D34
7D21

Essa primeira parte consiste na criação de um objeto do tipo DataFrame passando como dados o dicionário criado por você.

  • Criando a nova coluna:
import numpy as np

dataframe['Valores_2'] = np.where(dataframe['R_D']=='R', dataframe['Valores'], dataframe['Valores']*-1)
dataframe

Saída:

R_DValoresValores_2
0R8080
1D10-10
2R4040
3D23-23
4R7979
5D12-12
6D34-34
7D21-21

Nesse trecho de código estamos criando uma nova coluna chamada "Valores_2" com base nos valores já existentes em dataframe. Para fazer isso foi utilizado o método where da biblioteca numpy. Sua sintaxe é np.where(condition, x, y) onde é retornado x se a condição for atendida, caso contrário y. Então colocamos como condição dataframe['R_D']=='R' caso o valor presente na coluna R_D seja R, retornamos o próprio valor dataframe['Valores'], caso não seja R retornamos o valor multiplicado por -1 dataframe['Valores']*-1. Dessa forma garantimos valores positivos para 'R' e valores negativos para 'D'.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

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

Legal. Entendi agora muito mais o conceito, obrigado Bruno pela explicação. Grata.

Maravilha! Muito Obrigado!