python - 检查列中的值是否为真,则左侧的所有值也为真
问题描述
+------+------+------+------+------+
| ColA | ColB | ColC | ColD | ColE |
+------+------+------+------+------+
| 1 | 1 | 1 | 1 | 1 |
| 1 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 1 |
+------+------+------+------+------+
看一下上面的示例表,目标是检查列中的值是否为真,但同一行中其左侧的一列或多列不为真的情况。
我用一个凌乱的嵌套 if 语句完成了这个,从 开始ColE
,检查它是否为真,然后检查ColA
throughColD
是否也为真,然后ColD
去做同样的事情,直到我检查了每一列(ColA
不需要要检查,因为它的左侧没有列)。
因此,例如,该逻辑会将第二行和第三行标记为错误,因为错误列右侧的列是正确的,但第一行是可以的。
有没有办法简化这个逻辑,或者这是否优雅?
解决方案
您可以使用:
df.shift(-1, axis=1).le(df).iloc[:,:-2].all(axis=1)
输出:
0 True
1 False
2 False
dtype: bool
在第一步中,我们将所有值向左移动:
df.shift(-1, axis=1)
输出:
ColA ColB ColC ColD ColE
0 1.0 1.0 1.0 1.0 NaN
1 1.0 0.0 1.0 0.0 NaN
2 1.0 1.0 1.0 1.0 NaN
在第二步中,我们比较移位值是否小于或等于原始值:
df.shift(-1, axis=1).le(df)
输出:
ColA ColB ColC ColD ColE
0 True True True True False
1 True True False True False
2 False True True True False
在最后一步中,我们忽略最后一列并检查每行中的所有值是否都是True
.
推荐阅读
- powershell - 显式调用程序创建新窗口并且不起作用
- mysql - MySQL 字符集有问题
- r - 将 sparklyr 连接到本地时出错
- list - SPARQL DBpedia - 如何检索维基百科类别的成员
- fortran - 如何在 FFTW 中以 2 维或更多维进行归一化?
- python-3.x - PyPDF2,为什么会出现索引错误?列表索引超出范围
- sql - 根据 SSAS 中的角色限制对多维数据集的访问
- php - 为 Woocommerce 中的选定产品禁用特定的统一运费方式
- excel - 循环通过过滤数据透视表,将每个可见值添加到范围中的下一个单元格
- jenkins - Jenkins 声明式顺序管道