is和“=”之间的差异

2024-06-06 05:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图乘-1到所有的信贷费用,同时保持相同的借记费用使用列表理解,但如果函数被忽略。我怀疑这里有语法错误if transactions['Transaction Type'] is "debit",但我不知道为什么。你知道吗

这是密码

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

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

结果包含值的所有负值:

             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

Tags: 函数密码列表ifisvaluetypeamount
1条回答
网友
1楼 · 发布于 2024-06-06 05:54:10

正如您所怀疑的,if transactions['Transaction Type'] is "debit"部分有两个问题。你知道吗

首先,使用is检查两个对象是否是same object,而不是它们是否相等。你知道吗

第二,transactions['Transaction Type']很可能是一个列表(或者至少是类似列表的),基于你问题中的其他信息。即使您使用的是==,它仍然是False,因为列表永远不会等于字符串。你知道吗

然后,迭代transactions['Values']中的值,但只与transactions['Transaction Type']条目(同样,它是一个列表)进行比较。您需要同时迭代这两者,以便将事务类型与正确的金额进行比较:

transactions['Value'] = [
    i if j == "debit" else i * -1
    for i, j in zip(transactions['Amount'], transactions['Transaction Type'])
]

相关问题 更多 >