is和“ ==”之间的区别

时间:2019-12-02 20:52:44

标签: python pandas list-comprehension

我试图将-1乘以所有贷方费用,同时使用列表推导使借方费用保持相同,但是,if函数被忽略了。我怀疑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

1 个答案:

答案 0 :(得分:1)

您怀疑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'])
]