有没有办法更有效地编码?我试过np,但是有太多的条件,它们太复杂了,我无法让它正常工作。我知道必须有一个比大规模elif声明更快的方法,但这是唯一的方法,我可以把我的条件都扔在那里。我正在运行大约100万行的excel,所以如果有其他更快的选择,我希望听到他们!
代码如下:

def pol_cost(x):
    if ( 9500000> x.CRV >= 50 ):
        if (x.MDI > MDI_var):
            if (x.CI < 40 ):
               return x.CRV
            elif (60 <= x.CI <80):
               return x.CRV*((100-x.CI)/(100-var_var))**x.Cost_Escalation_N
        else:
            return 0
    else:
         return 0
    df1['Policy_Cost_Y1'] = df1.apply(pol_cost, axis = 1)

最佳答案

@chepner对条件语句的简化允许您将整个操作矢量化为

a = x.CI < 40
b = numpy.logical_and(
    60 <= x.CI,
    x.CI < 80,
)
c = numpy.logical_or(
    numpy.logical_and(
        9500000 > x.CRV,
        x.CRV >= 50
    ),
    x.MDI <= MDI_var,
)

tmp = numpy.zeros_like(x.CRV)
tmp[a] = x.CRV[a]
tmp[b] = x.CRV[b] * ((100-x.CI[b])/(100 - var_var))**x.Cost_Escalation_N[b],
tmp[c] = 0
df1['Policy_Cost_Y1'] = tmp

10-05 23:53