我有一个数据框,它看起来像:
A B C
13.06 12.95 -0.11
92.56 104.63 12.07
116.49 219.27 102.78
272.11 487.26 215.15
300.11 780.75 480.64
大约有 100 万条记录。
我想创建一个列 D 其计算如下:
列的第一个值D
将为 0,然后:
Col D3
= =(D2+1)*C3/B3
Col D4
= =(D3+1)*C4/B4
D 列的现值取决于先前的值。
结果如下:
D
0
0.115358884
0.52281017
0.672397915
1.02955022
我可以解决它使用for loop and loc
但它需要很多时间。我可以用更有效的pythonic方式解决它吗?
递归计算不可矢量化,为了提高性能使用numba:
from numba import jit
@jit(nopython=True)
def f(a, b, c):
d = np.empty(a.shape)
d[0] = 0
for i in range(1, a.shape[0]):
d[i] = (d[i-1] + 1) * c[i] / b[i]
return d
df['D'] = f(df['A'].to_numpy(), df['B'].to_numpy(), df['C'].to_numpy())
print (df)
A B C D
0 13.06 12.95 -0.11 0.000000
1 92.56 104.63 12.07 0.115359
2 116.49 219.27 102.78 0.522810
3 272.11 487.26 215.15 0.672398
4 300.11 780.75 480.64 1.029550
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句