例如,我有两列A和B(如在熊猫数据框中一样):
A B 0 1 1 1 1 0 2 0 1 3 0 0
如何基于A,B和C_prev_row(其从上一行获得的计算值)计算列C,以得到以下结果:
A B C 0 1 1 1 1 1 0 1 2 0 1 1 3 0 0 0
我希望应用的公式是:
C = A * C_prev_row + B, the initial C_prev_row = 0.
第0行:
C0 = 1 * 0 + 1 = 1
对于第1行:
C1 = 1 * 1 + 0 = 1
第2行:
C2 = 0 * 1 + 1 = 1
第3行:
C3 = 0 * 1 + 0 = 0
有没有一种方法可以在不循环浏览行的情况下提高性能?
答案 0 :(得分:1)
您需要分解逻辑C后面的逻辑
(df.A.iloc[1:].cumprod()*1).add((df.A.iloc[2:].cumprod()*df.B.iloc[1])+df.B,fill_value=0).fillna(1)
Out[983]:
0 1.0
1 1.0
2 1.0
3 0.0
dtype: float64
更多信息
C1=1
C2=A2*C1+B2
C3=A3*C2+B3=A3*A2*C1+A3*B2+B3
C4=A4*C3+B4=A4*A3*A2*C1+A4*A3*B2+B4