Я считаю, что один из способов - просто сдвинуть A
и B
, использовать его в качестве столбца C
и D
, заменить строки, где оба равны 0, на nan
, выполнить прямую заливку и, наконец, заменитьtop NaN
с 0:
df[['C','D']] = df[['A','B']].shift()
df.loc[(df[['C','D']] == 0).all(1), ['C','D']] = np.nan
df.ffill().fillna(0).astype(int)
A B C D
0 1 1 0 0
1 0 0 1 1
2 2 3 1 1
3 0 0 2 3
4 0 0 2 3
5 5 4 2 3
6 0 3 5 4
7 0 0 0 3