从数据框中删除布尔行

3

如何快速删除A、B和C都为false的行?

我尝试了:

df3 = df[~(~(df['A'])& ~(df['B']) & ~(df['C']) )]
df3
   com     A        B           C
0  as     TRUE    FALSE       FALSE
1  da     TRUE    FALSE       FALSE

3个回答

5

删除行,其中 A、B 和 C 同时为 false。

使用 df.sum 沿着 axis=1 进行求和,并进行比较,如果这些列的总和不等于0,则使用df.ne从行中删除它们。

out = df[df[['A','B','C']].sum(1).ne(0)].copy()

谢谢!您介意解释一下吗?我没有完全理解。 - asd
当你对列“A,B,C”的每一行求和时,如果存在任何“True”值,则会返回1个或多个,因此我检查总和是否不等于零(这意味着该行的所有列都为“False”)。 - anky
谢谢。出于好奇,我写的代码有什么问题吗?我是否误解了某些语法或者其他方面的东西? - asd
如果你执行的是 False&False&False(即 False),假设行中的所有列都为 False,然后你对其进行反转(~),它将始终返回 True,因此对于具有所有 False 值的行,它仍然返回 True,因此不会删除它。 - anky

4

稍等片刻 任何

df[df[['A','B','C']].any(1)]

这是最简单的内置方式..!! - anky
我完全同意,我过度思考了这个问题。 - Chris Adams

2

一种使用沿轴1的all的替代方法。第二个 ~ 运算符直接 - 直接在 df 之前,将所有 False 反转为 True。如果所有列值都是 True,则 all 返回 True,然后再次使用 ~ 将其反转,以索引实际上全部为 False 的行:

df3 = df[~(~df[['A', 'B', 'C']]).all(1)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接