首页 > 解决方案 > 为每个列对组合查找以前的非零对,并为使用 python 的那些组合创建单独的列

问题描述

我有一个这样的数据框:

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 方式实现最少的执行时间。

标签: pythonpandasdataframe

解决方案


我相信一种方法是仅移位AB,将其用作您的CD列,将两者都为 0 的行替换为nan,向前填充,最后将顶部替换为NaN0:

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

推荐阅读