首页 > 解决方案 > 您可以根据总和或计数或多个变量过滤熊猫数据框吗?

问题描述

我正在尝试根据一组 or 条件过滤 Pandas 数据框,但它们都非常相似,我想知道是否有更有效的方法来编写它。

具体来说,我想包括数据框(df)中的任何一组变量为1的行:

df.query("Q50r5==1 or Q50r6==1 or Q50r7==1 or Q50r8==1 or Q50r9==1 or Q50r10==1 or Q50r11==1")

这会正确过滤到这些变量中的任何一个为 1 的行。

但是,我希望有更多的情况需要将我的数据框过滤为类似的东西,例如:

df.query("Q20r1==1 or Q20r2==1 or Q20r3==1")
df.query("Q23r2==1 or Q23r5==1 or Q23r7==1 or Q23r8==1")

pandas 文档.query()只指定了您可以在 Python 的其他地方使用的和或类似的内容,因此这可能是执行此查询的唯一方法,但是我可以做某种总和或计数吗跨查询中的这些列?像“any(1,Q20r1,Q20r2,Q20r3)”或“sum(Q20r1,Q20r2,Q20r3)>0”这样的东西?

编辑:例如,使用这个小数据框: 示例数据框

我想检索 ID #s 1、2、4、5、7 并排除 #s 3 和 6,因为 3 和 6 在我所指的列中没有任何 1。

标签: pythonpandas

解决方案


您可以使用anywithaxis = 1来检查是否至少有一个值True在一行中。

例如,您可以运行

df[(df[["Q20r1", "Q20r2", "Q20r3"]] == 1).any(axis = 1)]

推荐阅读