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

如何编写可扩展高性能Python条件语句 转换复杂嵌套Excel IF公式

Excel嵌套IF公式转Python实现方案

核心转换逻辑

Excel的IF(条件, 满足返回值, 不满足返回值)嵌套结构,直接对应Python的if-elif-else分支结构,为了提升可读性,建议将优先级最高的判断条件前置,减少嵌套层级。
如果是处理表格类数据,推荐用pandas库实现,列名直接对应Excel列名,支持全表批量处理,无需逐行循环。

前置准备

  1. 固定常量定义:Excel中的绝对引用$BJ$5、$BJ$6提前定义为常量,填入实际数值即可。
  2. 函数映射:
  • AND(条件1,条件2):单条数据对应条件1 and 条件2,pandas批量处理对应(条件1) & (条件2)
  • OR(条件1,条件2):单条数据对应条件1 or 条件2,pandas批量处理对应(条件1) | (条件2)
  • SUM(列1:列2):直接对对应列做加法运算
  • AVERAGE(列1:列2):对对应列取均值
  • VLOOKUP:提前将匹配表的匹配列和返回列转为字典,比如vlookup_map = dict(zip(匹配表['匹配列'], 匹配表['返回列'])),取值用vlookup_map.get(匹配值, 默认值)避免匹配不到报错。

单条数据转换示例(按原公式嵌套逻辑)

def get_review_reason(
    DG, G, H, BV, AC, AR, J, K, CK, DP, M, N, DN, DD, E, I, DH, BK_SUM, CI, L, 
    AB, AA, O_AB_AVG, AQ, AP, AD_AQ_AVG, vlookup_A_val, CN, BJ5, BJ6, vlookup_map
):
    # 第一层判断
    if DG == 1 and (G+H) > 8*BV and (G+H) > 0 and (AC+AR) < 10:
        return 0
    # 第二层判断
    elif DG == 1 and (G+H) >30:
        return 0
    # 第三层判断 DG-J>0的分支
    elif DG - J > 0:
        if K == 1:
            if CK <3:
                return "NLA"
            else:
                return "auto_URGENTE" if DP ==1 else "auto"
        else:
            if (M + N) >0:
                return "Quality Block" if M ==5 else "Active Replacement"
            else:
                if DN ==1:
                    return "Demand" if DG >0 else 0
                else:
                    if CK > BJ5:
                        if DD >0 and E ==1:
                            return "auto_URGENTE" if DP ==1 else "auto"
                        else:
                            if I >0:
                                return "External PO"
                            else:
                                if DH ==0 and DP ==0:
                                    return 0
                                else:
                                    return "auto_URGENTE" if DP ==1 else "auto"
                    elif CK > BJ6:
                        return "auto_URGENTE" if DP ==1 else "auto"
                    else:
                        return "Critical"
    # 剩余分支
    else:
        if (G+H+I+J + BK_SUM) <0 and CI>0:
            return "BO"
        else:
            if f"{K}{L}{M}{N}" == "0000":
                cond1 = (AB + AA)*0.4 < O_AB_AVG
                cond2 = (AQ + AP)*0.4 < AD_AQ_AVG
                if cond1 or cond2:
                    if (G+I+H+J) < (AB+AA+AQ+AP):
                        vlookup_val = vlookup_map.get(vlookup_A_val, 0)
                        if vlookup_val > (AA+AB+AP+AQ):
                            return "Possible BO" if CN <0 else 0
                        else:
                            return 0
                    else:
                        return 0
                else:
                    return 0
            else:
                return 0

注意事项

  • 所有参与数值运算的变量提前确认是数值类型,避免字符串参与计算报错
  • 求和、均值计算的列范围可以根据实际Excel列对应调整
  • 批量处理全表数据时,用pandas的apply方法调用上面的函数,或者用np.where写向量化判断,运行效率远高于逐行循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:15:05