if-Anweisung Logikfehler für Liste Verständnis

stimmen
0

Ich versuche , zu multiplizieren -1 auf alle Kreditkosten während Abbuchungs halten die Verwendung derselben Liste Verständnis auflädt aber wurde die , wenn die Funktion ignoriert. Ich vermute , es ist ein Syntaxfehler hier , if transactions['Transaction Type'] is debitaber ich kann nicht herausfinden , warum.

Hier ist der 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']])

Das Ergebnis enthält alle negativen Werte auf Wert:

             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
Veröffentlicht am 02/12/2019 um 23:52
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Es gibt zwei Probleme im if transactions['Transaction Type'] is "debit"Abschnitt , wie Sie vermutet.

Erstens, indem isüberprüft , ob zwei Objekte sind das gleiche Objekt , nicht , wenn sie gleich sind.

Zweitens transactions['Transaction Type']ist höchstwahrscheinlich eine Liste (oder zumindest die Liste artig), bezogen auf den anderen Informationen in Ihrer Frage. Auch wenn Sie verwendet haben , ==wie Sie sein sollte, wäre es immer noch sein False, weil eine Liste nie in einen String gleich sein wird.

Dann sind Iterieren Sie die Werte in transactions['Values'], sondern immer nur auf den Vergleich transactions['Transaction Type']Eintrag (die wiederum eine Liste ist ). Sie müssen zur gleichen Zeit zu wiederholen beide so , dass Sie die Bewegungsart mit der richtigen Menge sind zu vergleichen:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
Beantwortet am 03/12/2019 um 00:03
quelle vom benutzer

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