我有一个像这样的数据框:
A B
1 1
0 0
2 3
0 0
0 0
5 4
0 3
0 0
我想再添加两个满足以下条件的列: 对于每对A和B对,先前的非零对值将添加到其他两列中,但第一次在这两者中均为零,
例如,输出将像:
A B C D
1 1 0 0
0 0 1 1
2 3 1 1
0 0 2 3
0 0 2 3
5 4 2 3
0 3 5 4
0 0 0 3
我可以使用循环来做到这一点,但我希望以大多数Python方式减少执行时间。
答案 0 :(得分:1)
我相信一种方法是只移动A
和B
,将其用作您的C
和D
列,用{{1 }},向前填充,最后将顶部nan
替换为0:
NaN
答案 1 :(得分:0)
我分解了步骤
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