猿问

根据条件 pandas 传播值

说我有这样的熊猫数据框: 在此处输入图像描述

现在,如果该行中已经出现 1,我想将所有 1 更新为 0。因此,新的 df 将如下所示: 在此处输入图像描述

df = pd.DataFrame({"Col_A":[0, 1, 0, 1, 1], "Col_B":[1, 0, 0, 0, 1],

             "Col_C":[0, 0, 0, 0, 1],"Col_D":[1, 1, 0, 0, 1],

             "Col_E":[0, 0, 1, 0, 1]})

我想知道是否有一种有效的方法可以在熊猫中实现这一点。目前,我正在遍历每一行,然后是每一列,然后保留一个标志以检查是否发生了 1 并随后更新值。


Smart猫小萌
浏览 93回答 1
1回答

皈依舞

设置import numpy as npdf = pd.DataFrame(np.random.randint(2,size = (10,10)))print(df)   0  1  2  3  4  5  6  7  8  90  0  0  1  0  0  1  0  0  0  11  0  0  0  0  0  1  1  1  1  12  0  1  0  1  0  1  0  0  0  13  1  0  0  1  0  1  0  0  1  14  1  0  1  1  0  1  0  0  0  05  0  1  1  1  1  0  1  0  1  16  0  0  0  1  1  0  0  0  1  07  1  1  1  1  1  0  0  0  1  18  0  0  0  0  0  1  1  0  1  19  0  0  0  1  0  0  0  1  0  1解决方案Series.cumsum与Series.shift表演面具DataFrame.maskdf.mask(df.cumsum(axis = 1).shift(axis = 1).gt(0),0)   0  1  2  3  4  5  6  7  8  90  0  0  1  0  0  0  0  0  0  01  0  0  0  0  0  1  0  0  0  02  0  1  0  0  0  0  0  0  0  03  1  0  0  0  0  0  0  0  0  04  1  0  0  0  0  0  0  0  0  05  0  1  0  0  0  0  0  0  0  06  0  0  0  1  0  0  0  0  0  07  1  0  0  0  0  0  0  0  0  08  0  0  0  0  0  1  0  0  0  09  0  0  0  1  0  0  0  0  0  0输出 OP 数据帧print(df.mask(df.cumsum(axis = 1).shift(axis = 1).gt(0),0))   Col_A  Col_B  Col_C  Col_D  Col_E0      0      1      0      0      01      1      0      0      0      02      0      0      0      0      13      1      0      0      0      04      1      0      0      0      0另一个可能的解决方案:DataFrame.clipdf.sub(df.cumsum(1)).add(df).clip(lower = 0)
随时随地看视频慕课网APP

相关分类

Python
我要回答