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_D | Valores |
|---|
| 0 | R | 80 |
| 1 | D | 10 |
| 2 | R | 40 |
| 3 | D | 23 |
| 4 | R | 79 |
| 5 | D | 12 |
| 6 | D | 34 |
| 7 | D | 21 |
Essa primeira parte consiste na criação de um objeto do tipo DataFrame passando como dados o dicionário criado por você.
import numpy as np
dataframe['Valores_2'] = np.where(dataframe['R_D']=='R', dataframe['Valores'], dataframe['Valores']*-1)
dataframe
Saída:
| R_D | Valores | Valores_2 |
|---|
| 0 | R | 80 | 80 |
| 1 | D | 10 | -10 |
| 2 | R | 40 | 40 |
| 3 | D | 23 | -23 |
| 4 | R | 79 | 79 |
| 5 | D | 12 | -12 |
| 6 | D | 34 | -34 |
| 7 | D | 21 | -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!