【问题标题】:Python If Conditions - How to write in a more scalable and performative way?Python If 条件 - 如何以更具可扩展性和性能的方式编写?
【发布时间】:2021-08-25 18:24:12
【问题描述】:

您好,我有一个 Excel 公式,我想用 Python 翻译/重写它。但正如你所见,这是一个巨大的条件结构。每个 Excel 单元格都是我的数据集中的一列,它的定义在这里无关紧要,因为我只是想知道如何将它翻译成 Python 语言。所以任何帮助真的很感激。我想创建条件结构的以下代码是:我想知道如何使用 if 条件创建它。

#Review Reason Formula
=IF(AND(DG1=1,G1+H1>8*BV1,G1+H1>0,AC1+AR1<10),0,IF(AND(DG1=1,G1+H1>30),0,IF(DG1-J1>0,IF(K1=1,IF(CK1<3,"NLA",IF(DP1=1,"auto_URGENTE","auto")),IF(SUM(M1:N1)>0,IF(M1=5,"Quality Block","Active Replacement"),IF(DN1=1,IF(DG1>0,"Demand",0),IF(CK1>$BJ$5,(IF(AND(DD1>0,E1=1),IF(DP1=1,"auto_URGENTE","auto"),IF(I1>0,"External PO",IF(AND(DH1=0,DP1=0),0,IF(DP1=1,"auto_URGENTE","auto"))))),IF(CK1>$BJ$6,IF(DP1=1,"auto_URGENTE","auto"),"Critical"))))),IF(AND(G1+H1+I1+J1+SUM(BK1:BQ1)<0,CI1>0),"BO",IF(K1&L1&M1&N1="0000",IF(OR((AB1+AA1)*0.4<AVERAGE(O1:AB1),(AQ1+AP1)*0.4<AVERAGE(AD1:AQ1)),IF(G1+I1+H1+J1<AB1+AA1+AQ1+AP1,IF((VLOOKUP(A1,SumIfsReplacement!A:B,2,0))*1>AA1+AB1+AP1+AQ1,IF(CN1<0,"Possible BO",0),0),0),0),0)))))

【问题讨论】:

  • 您能否创建一些示例输入以及该输入的预期输出。应该有足够的数据来捕捉你的 if then 树的每条腿。
  • 天哪,伙计。如果一个程序员带着那个公式来找我,我会解雇他。我将发布一个答案,显示此表达式中的嵌套级别。也许这会有所帮助。
  • 这是一个解析问题,所以也许你可以使用 PyParsing 之类的东西,或者在 NLTK 的基础上构建等式的部分,然后尝试将其重构为 Python。另见this SO question
  • 也许,这能回答你的问题吗? parsing excel style formula
  • VBA 是 Excel 工作表可移植性的最佳选择。 IE。不要使用 python。

标签: python pandas dataframe function


【解决方案1】:

这是此表达式中的嵌套级别。也许这会帮助你翻译它,但我很怀疑。

=IF(
    AND(DG1=1,G1+H1>8*BV1,G1+H1>0,AC1+AR1<10),0,
    IF(
        AND(DG1=1,G1+H1>30),0,
        IF(DG1-J1>0,
            IF(K1=1,
                IF(CK1<3,"NLA",IF(DP1=1,"auto_URGENTE","auto")),
                IF(SUM(M1:N1)>0,
                    IF(M1=5,"Quality Block","Active Replacement"),
                    IF(DN1=1,
                        IF(DG1>0,"Demand",0),
                        IF(CK1>$BJ$5,
                            (IF(AND(DD1>0,E1=1),
                                IF(DP1=1,"auto_URGENTE","auto"),
                                IF(I1>0,"External PO",
                                    IF(AND(DH1=0,DP1=0),0,
                                        IF(DP1=1,"auto_URGENTE","auto")
                                    )
                                )
                            )),
                            IF(CK1>$BJ$6,
                                IF(DP1=1,"auto_URGENTE","auto"),"Critical"
                            )
                        )
                    )
                )
            ),
            IF(
                AND(G1+H1+I1+J1+SUM(BK1:BQ1)<0,CI1>0),"BO",
                IF(
                    K1&L1&M1&N1="0000",
                    IF(
                        OR((AB1+AA1)*0.4<AVERAGE(O1:AB1),(AQ1+AP1)*0.4<AVERAGE(AD1:AQ1)),
                        IF(G1+I1+H1+J1<AB1+AA1+AQ1+AP1,
                            IF((VLOOKUP(A1,SumIfsReplacement!A:B,2,0))*1>AA1+AB1+AP1+AQ1,IF(CN1<0,"Possible BO",0),0
                            ),0
                        ), 0
                    ), 0
                )
            )
        )
    )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2011-03-05
    相关资源
    最近更新 更多