如何不逐个指定列名统计Pandas DataFrame中全列值为1的行数
Pandas统计所有列取值均为1的行数的简洁方案
你可以直接用列批量判断的方法实现,不需要逐个写列名,核心写法如下:
count = df.eq(1).all(axis=1).sum()
上述代码的逻辑拆解:
df.eq(1):将DataFrame内所有元素与1做等值比较,返回结构和原DataFrame完全一致的布尔值表.all(axis=1):按行维度校验,只有当前行所有列的布尔值都为True时才返回True,最终得到每行的校验结果组成的布尔序列.sum():对布尔序列求和(True会被视为1,False视为0),最终结果就是所有列均为1的总行数,代入你的示例数据运行得到的结果就是2。
如果你只需要校验部分列(比如你之前提到的仅统计A、B列均为1的行数),可以先切片指定列再执行判断,写法也比query更简洁:
count = df[['A', 'B']].eq(1).all(axis=1).sum()
如果处理的是超大数据量的DataFrame,想要更高的运行效率,可以转numpy数组计算:
count = (df.to_numpy() == 1).all(axis=1).sum()
内容的提问来源于stack exchange,提问作者rayqz
相关产品推荐
相关产品推荐

