python - 为每个列对组合查找以前的非零对,并为使用 python 的那些创建单独的列

标签 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

我可以使用循环来完成,但我希望以大多数 pythonic 方式执行时间最少。

最佳答案

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

相关文章:

Python opencv 视频捕获给出中止陷阱

python - Nan 不会在 Python 中退出

python - 如何按一列进行分组并统计其他列中的类别数?

python - 如何在 Pandas 中保存符合特定条件的先前结果

python - 为 RadioSelect 中的每个选项设置 help_text

python - 在处理请求之前设置请求的属性

python - 如何在Python中获取季度开始日期

pandas - 分解具有不同值长度的多个列表列

python - Apache MXNet - 胶子和模块之间的转换(反之亦然)?

python - 为计算值设置数据框中的小数位数