早上好

我试图根据其他列中的值替换多个列值.我可以在R中做到这一点,但我不明白如何在python中做到这一点.我试着用np.where()和df.loc方法,但它只允许我处理单个列.数据是一次热编码的结果,因此数据帧包含id,但代码列只有0和1.由于这些数据是一个热编码的数据,我们可以有许多代码列,但唯一需要替换的是code3和code4

示例输入

id code1 code3 code4 code 5 code..n
ABC 1 1 1 1 1
CDE 0 1 1 0 1
EFG 1 0 1 0 1

I want to accomplish the following

每行如果除code3和code4之外的任何其他列中有任何1,则将code3和code4列中的1替换为0

示例输出

id code1 code3 code4 code 5 code..n
ABC 1 0 0 1 1
CDE 0 0 0 0 1
EFG 1 0 0 0 1

非常感谢.

推荐答案

可以使用布尔索引:

c = ['code3', 'code4']
df.loc[df.drop(c, axis=1).eq(1).any(1), c] = 0

    id  code1  code3  code4  code 5  code..n
0  ABC      1      0      0       1        1
1  CDE      0      0      0       0        1
2  EFG      1      0      0       0        1

Python相关问答推荐

Ibis中是否有一个ANY或ANY_UTE表达,可以让我比较子查询返回的一组值中的值?

KNN分类器中的GridSearchCV

是什么导致对Python脚本的jQuery Ajax调用引发500错误?

由于瓶颈,Python代码执行太慢-寻求性能优化

LAB中的增强数组

为什么tkinter框架没有被隐藏?

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

如何避免Chained when/then分配中的Mypy不兼容类型警告?

_repr_html_实现自定义__getattr_时未显示

什么相当于pytorch中的numpy累积ufunc

Python中绕y轴曲线的旋转

将输入聚合到统一词典中

当点击tkinter菜单而不是菜单选项时,如何执行命令?

python中的解释会在后台调用函数吗?

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

幂集,其中每个元素可以是正或负""""

OpenCV轮廓.很难找到给定图像的所需轮廓

基于多个数组的多个条件将值添加到numpy数组

PYTHON、VLC、RTSP.屏幕截图不起作用

使用字典或列表的值组合