if logická chyba seznamu porozumění

hlasů
0

Snažím se množí od -1 do všech úvěrových nákladů při zachování inkasa účtuje stejný pomocí seznamu s porozuměním, ale je-li funkce byla ignorována. Mám podezření, že je chyba syntaxe tady if transactions['Transaction Type'] is debit, ale nemůžu přijít na to proč.

Zde je kód

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

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

Výsledek obsahuje všechny záporné hodnoty na hodnoty:

             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
Položena 02/12/2019 v 23:52
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Existují dva problémy v if transactions['Transaction Type'] is "debit"části, jak jste podezření.

Za prvé, s použitím iszkontroluje, zda dva objekty jsou stejný objekt , ne v případě, že jsou si rovny.

Za druhé, transactions['Transaction Type']je s největší pravděpodobností seznamu (nebo alespoň seznam-like), na základě jiných informací ve vaší otázce. Dokonce i když jste použili ==jako byste měli být, to by ještě bylo False, protože seznam nikdy nebude rovnat řetězec.

Potom jste iterace hodnoty v transactions['Values'], ale jen někdy ve srovnání se transactions['Transaction Type']vstupem (což je opět seznam). Musíte iteraci oba najednou, takže jste porovnáním typ transakce se správným množstvím:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
Odpovězeno 03/12/2019 v 00:03
zdroj uživatelem

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