Как вызвать применение к нескольким столбцам (включая столбец результата) без зацикливания - PullRequest
0 голосов
/ 05 октября 2018

Например, у меня есть два столбца A и B (как в pandas dataframe):

A  B
0  1  1
1  1  0
2  0  1
3  0  0

Как рассчитать столбец C на основе A, B и C_prev_row (его собственное вычисленное значение изпредыдущая строка), чтобы получить следующий результат:

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 голосов
/ 05 октября 2018

Вам необходимо разбить логику за значением 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
...