2 回答

TA贡献1777条经验 获得超3个赞
我分解步骤
mask=df.A.ne(0)|df.B.ne(0) # get the target row
df1=df[mask] # filter from original df
df1.index+=1 # get the index increase by one
df1.columns=['C','D'] # reassign the columns
pd.concat([df,df1],axis=1).ffill().fillna(0).astype(int) # using ffill
Out[569]:
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

TA贡献1812条经验 获得超5个赞
我相信一种方法是将A和B用作您的C和D列,将两者都为 0 的行替换为nan,向前填充,最后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
添加回答
举报