en cas d'erreur logique de l'instruction pour la compréhension de la liste

voix
0

Je suis en train de multiplier -1 à tous les frais de crédit tout en conservant la même charge de débit en utilisant la compréhension de la liste mais, la fonction if a été ignorée. Je soupçonne qu'il ya une erreur de syntaxe ici , if transactions['Transaction Type'] is debitmais je ne peux pas comprendre pourquoi.

Voici le 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']])

Le résultat contient toutes les valeurs négatives sur la valeur:

             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
Créé 02/12/2019 à 23:52
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Il y a deux problèmes dans la if transactions['Transaction Type'] is "debit"partie que vous doutiez.

Tout d' abord, en utilisant isvérifie si deux objets sont le même objet , pas si elles sont égales.

En second lieu , transactions['Transaction Type']est très probablement une liste (ou au moins la liste semblable), sur la base d' autres informations dans votre question. Même si vous utilisez ==comme vous devriez être, il serait encore False, parce qu'une liste ne sera jamais égale à une chaîne.

Ensuite, vous êtes itérer les valeurs transactions['Values'], mais jamais à comparer à l' transactions['Transaction Type']entrée (qui encore une fois, une liste). Vous devez itérer les deux en même temps pour que vous comparez le type de transaction avec le montant droit:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]
Créé 03/12/2019 à 00:03
source utilisateur

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