You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Pandas DataFrame中满足指定布尔条件的行数

统计Pandas DataFrame中指定布尔列满足「或」条件的行数

问题说明

需要统计DataFrame中bool1或bool2列值为True的总行数,预期结果为3。示例DataFrame的构建代码及输出如下:

示例DataFrame构建代码

import pandas as pd
from pandas import DataFrame

names = {'First_name': ['Jon','Bill','Maria','Emma'], 'Last_name': ['Bobs', 'Vest', 'Gong', 'Hill'],
        'Roll': ['Absent', 'Present', 'Present', 'Absent']}

df = DataFrame(names)
keys = ['Jon', 'Maria', 'Gong', 'Hill', 'Present', 'No']

pattern = r"(?i)" + "|".join(keys)
df['bool1'] = df['First_name'].str.contains(pattern)
df['bool2'] = df['Last_name'].str.contains(pattern)

生成的DataFrame

First_name  Last_name   Roll    bool1   bool2
0   Jon         Bobs        Absent  True    False
1   Bill        Vest        Present False   False
2   Maria       Gong        Present True    True
3   Emma        Hill        Absent  False   True

你尝试的两种写法均存在问题:

  • df.loc[(df['bool1'] == True) | (df['bool2'] == True)].sum()会对筛选后的列进行求和,而非统计符合条件的行数
  • 直接用if语句判断整列布尔值,逻辑错误,无法逐行判断条件

正确解决方案

方法1:直接对布尔掩码求和

布尔条件生成的掩码是布尔Series,True等价于1、False等价于0,直接调用sum()即可得到符合条件的行数:

# 简化写法(布尔列无需额外判断==True)
count = (df['bool1'] | df['bool2']).sum()
print(count)  # 输出3

方法2:统计筛选后行的长度

先筛选出满足条件的行,再用len()获取行数:

count = len(df[(df['bool1'] | df['bool2'])])
# 或使用loc索引
count = len(df.loc[(df['bool1'] | df['bool2'])])
print(count)

方法3:多列通用写法(扩展场景)

如果需要统计多列中任意一列为True的行数,可使用any(axis=1)逐行判断,再求和:

# 针对bool1、bool2列
count = df[['bool1', 'bool2']].any(axis=1).sum()
print(count)

内容的提问来源于stack exchange,提问作者Abir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:24:25