Se o erro lógica das declarações para compreensão da lista

votos
0

Eu estou tentando multiplicar -1 em todas as cargas de crédito, mantendo débito cobra o mesmo usando compreensão da lista, mas, a se a função foi ignorado. Eu suspeito que há um erro de sintaxe aqui if transactions['Transaction Type'] is debit, mas eu não consigo descobrir o porquê.

Aqui está o código

transactions['Value'] = [i if transactions['Transaction Type'] is debit else i*-1 for i in transactions['Amount']]

print(transactions.loc[:, ['Amount','Transaction Type','Value']])

O resultado contém todos os valores negativos sobre Valor:

             Amount Transaction Type    Value
Date                                         
2018-12-06    19.57            debit   -19.57
2018-12-06    27.87            debit   -27.87
2018-12-06     6.25            debit    -6.25
2018-12-06    14.38            debit   -14.38
2018-12-06    15.60            debit   -15.60
...             ...              ...      ...
2019-11-30    10.59            debit   -10.59
2019-11-30    51.32            debit   -51.32
2019-11-30   634.51           credit  -634.51
2019-12-01  4432.00            debit -4432.00
2019-12-01     5.00            debit    -5.00
Publicado 02/12/2019 em 23:52
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Existem dois problemas na if transactions['Transaction Type'] is "debit"parte que você suspeita.

Primeiro, usando isverifica se dois objetos são o mesmo objeto , não se eles são iguais.

Em segundo lugar, transactions['Transaction Type']é mais provável uma lista (ou, pelo menos, lista-like), com base na outra informação na sua pergunta. Mesmo se você estivesse usando ==como você deve ser, ainda assim seria False, porque uma lista nunca será igual a uma string.

Então, você está repetindo os valores transactions['Values'], mas sempre apenas comparando com a transactions['Transaction Type']entrada (que por sua vez, é uma lista). Você precisa iterate os dois ao mesmo tempo para que você está comparando o tipo de transação com a quantidade certa:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
Respondeu 03/12/2019 em 00:03
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more