以下应该工作:
def EOQ(D,p,ck,ch): Q = math.sqrt((2*D*ck)/(ch*p)) return Qch=0.2ck=5df['Q'] = df.apply(lambda row: EOQ(row['D'], row['p'], ck, ch), axis=1)df
如果您要做的只是计算某个结果的平方根,则使用
np.sqrt矢量化的方法,它将大大加快速度:
In [80]:df['Q'] = np.sqrt((2*df['D']*ck)/(ch*df['p']))dfOut[80]: D p Q0 10 20 5.0000001 20 30 5.7735032 30 10 12.247449
时机
对于3万行df:
In [92]:import mathch=0.2ck=5def EOQ(D,p,ck,ch): Q = math.sqrt((2*D*ck)/(ch*p)) return Q%timeit np.sqrt((2*df['D']*ck)/(ch*df['p']))%timeit df.apply(lambda row: EOQ(row['D'], row['p'], ck, ch), axis=1)1000 loops, best of 3: 622 µs per loop1 loops, best of 3: 1.19 s per loop
您可以看到np方法快了约1900 X



