Python pandas IF与&逻辑判断返回结果异常问题求解
问题原因
你的判断条件和实际业务逻辑不匹配:
- 你当前代码中,仅当
No of Transactions == 0且GST == 0两个条件同时满足时,才会直接返回含税成本,其余所有情况都会走else分支乘以0.9计算。 - 但你的业务规则是只要GST为0,含税成本就等于不含税成本,无需乘以0.9,和交易数数值无关。
- 你测试的样例行
No of transactions=1、GST=0不满足你写的if判断条件,因此被错误走到else分支计算得到0.45。 - 额外注意:你的代码中列名引用存在大小写不一致风险,原表列名是
No of transactions(transactions首字母小写t),代码中写的是No of Transactions(大写T),如果列名大小写严格匹配会触发KeyError,建议对齐列名写法。
解决方案
方案1:修正自定义apply函数
调整判断逻辑,去掉无关的交易数判断,仅以GST是否为0作为分支条件:
def incl(s): if s['GST'] == 0: return s['Item cost GST inclusive'] else: return s['Item cost GST inclusive'] * 0.9 # 注意对齐列名大小写 df2['Item Cost GST exclusive'] = df2.apply(incl, axis=1)
方案2:使用pandas向量化运算(推荐,性能更优)
当数据量较大时,apply逐行运行效率很低,建议使用numpy的向量化方法实现,逻辑更清晰速度更快:
import numpy as np df2['Item Cost GST exclusive'] = np.where( df2['GST'] == 0, df2['Item cost GST inclusive'], df2['Item cost GST inclusive'] * 0.9 )
验证效果
对你给出的测试样例,修正后计算结果如下,完全符合预期:
| No of transactions | GST | Item cost GST inclusive | Item Cost GST exclusive |
|---|---|---|---|
| 1 | 0 | 0.5 | 0.5 |
补充提示:你提到的「交易数为0时不存在商品成本」属于数据校验规则,建议单独写异常校验逻辑实现,不要和税额计算逻辑耦合,避免后续规则调整时引入错误。
内容的提问来源于stack exchange,提问作者Mihan
相关产品推荐
相关产品推荐

