se errore logico economico di lista

voti
0

Sto cercando di moltiplicare -1 a tutti i costi del credito, mantenendo debito carica lo stesso utilizzando di lista ma, la se la funzione è stata ignorata. Ho il sospetto che ci sia un errore di sintassi qui if transactions['Transaction Type'] is debitma non riesco a capire perché.

Ecco il codice

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

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

Il risultato contiene tutti i valori negativi sul valore:

             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
È pubblicato 02/12/2019 alle 23:52
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Ci sono due problemi in if transactions['Transaction Type'] is "debit"parte, come si sospetta.

In primo luogo, utilizzando iscontrolla se due oggetti sono stesso oggetto , non se sono uguali.

In secondo luogo, transactions['Transaction Type']è più probabile un elenco (o almeno l'elenco-like), in base alla altre informazioni nella sua interrogazione. Anche se si sta utilizzando ==come si dovrebbe essere, sarebbe comunque False, perché l'elenco non sarà mai uguale a una stringa.

Quindi, si sta scorrendo i valori in transactions['Values'], ma sempre e solo il confronto al transactions['Transaction Type']di ingresso (che ancora una volta, è una lista). Hai bisogno di iterare entrambi allo stesso tempo in modo che si sta confrontando il tipo di transazione con la giusta quantità:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
Risposto il 03/12/2019 a 00:03
fonte dall'utente

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