jeśli błąd logiczny oświadczenie dla listowego

głosy
0

Staram się mnożyć -1 do wszystkich opłat kredytowych, debetowych pobiera przy zachowaniu tego samego używając listowych Ale, jeśli funkcja została zignorowana. Podejrzewam, że jest błąd składni tutaj if transactions['Transaction Type'] is debitale nie mogę zrozumieć dlaczego.

Oto kod

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

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

Wynik zawiera wszystkie wartości ujemne na temat wartości:

             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
Utwórz 02/12/2019 o 23:52
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Istnieją dwa problemy w if transactions['Transaction Type'] is "debit"części, jak podejrzenia.

Po pierwsze, za pomocą isczeków czy dwa obiekty są tego samego obiektu , jeśli nie są one równe.

Po drugie, transactions['Transaction Type']jest to najprawdopodobniej lista (lub przynajmniej list-like), na podstawie innych informacji w swoim pytaniu. Nawet jeśli były przy użyciu ==jak powinno być, to i tak będzie False, bo lista nigdy nie będzie równy ciąg.

Wtedy jesteś iteracji wartości w transactions['Values'], ale zawsze tylko w porównaniu do transactions['Transaction Type']wpisu (który znowu jest lista). Trzeba iteracyjne zarówno w tym samym czasie tak, że jesteś porównując rodzaj transakcji z odpowiednią ilość:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
Odpowiedział 03/12/2019 o 00:03
źródło użytkownik

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