You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 transactionsGSTItem cost GST inclusiveItem Cost GST exclusive
100.50.5

补充提示:你提到的「交易数为0时不存在商品成本」属于数据校验规则,建议单独写异常校验逻辑实现,不要和税额计算逻辑耦合,避免后续规则调整时引入错误。

内容的提问来源于stack exchange,提问作者Mihan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:27:38