我有一个这样的数据框:
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
我可以使用循环来完成,但我希望以大多数 pythonic 方式执行时间最少。
最佳答案
我相信一种方法是移动A
和B
,将其用作您的C
和D
列,用nan
替换都是0的行,前向填充,最后把最上面的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
关于python - 为每个列对组合查找以前的非零对,并为使用 python 的那些创建单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560573/