如何在不循环的情况下在多个列(包括结果列)上调用Apply

时间:2018-10-05 13:41:59

标签: python python-3.x pandas numba

例如,我有两列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

有没有一种方法可以在不循环浏览行的情况下提高性能?

1 个答案:

答案 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