为每个列对组合找到先前的非零对,并为使用python的列创建单独的列

时间:2018-11-30 15:38:57

标签: python pandas dataframe

我有一个像这样的数据框:

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方式减少执行时间。

2 个答案:

答案 0 :(得分:1)

我相信一种方法是只移动AB,将其用作您的CD列,用{{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