if logica fout voor lijstcomprehensie

stemmen
0

Ik probeer te vermenigvuldigen -1 tot alle kredietkosten terwijl debit kosten hetzelfde met behulp van lijst begrip, maar de als functie werd genegeerd. Ik vermoed dat er een syntax fout hier if transactions['Transaction Type'] is debit, maar ik kan niet achterhalen waarom.

Hier is de code

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

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

Het resultaat bevat alle negatieve waarden op Waarde:

             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
De vraag is gesteld op 02/12/2019 om 23:52
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Er zijn twee problemen in het if transactions['Transaction Type'] is "debit"gedeelte als u vermoed.

Eerst, waarbij isna of twee objecten zijn hetzelfde object , niet indien zij gelijk zijn.

Ten tweede, transactions['Transaction Type']is het meest waarschijnlijk een lijst (of op zijn minst lijst-achtig), op basis van de andere informatie in uw vraag. Zelfs als je met behulp van ==als jij zou moeten zijn, zou het nog zijn False, want een lijst nooit gelijk zijn aan een string zal zijn.

Dan bent u iteratie van de waarden in transactions['Values'], maar alleen maar vergelijken met de transactions['Transaction Type']invoer (die weer, is een lijst). Je moet herhalen beide op hetzelfde moment, zodat je vergelijkt het type transactie met de juiste hoeveelheid:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
antwoordde op 03/12/2019 om 00:03
bron van user

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