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

Pandas 1.5中按行统计指定列的True/False/Null数量

环境说明

适用于Pandas 1.5版本

我有如下结构的DataFrame(A、B、D列为可空布尔类型):

| A     | B     | C     | D     |
| ----- | ----- | ----- | ----- |
| False | True  | 63.56 | True  |
| False | True  | 57.13 | <NA>  |
| True  | True  | 87.31 | True  |
| False | <NA>  | 71.09 | True  |
| False | False | 11.78 | False |
| <NA>  | False | 5.07  | True  |
| True  | False | 5.11  | True  |
| False | False | 9.55  | True  |

需要按行统计A、B、D三列中True、False、null的数量,得到结果如下:

| A     | B     | C     | D     | TrueCount | FalseCount | NullCount |
| ----- | ----- | ----- | ----- | --------- | ---------- | --------- |
| False | True  | 63.56 | True  | 2         | 1          | 0         |
| False | True  | 57.13 | <NA>  | 1         | 1          | 1         |
| True  | True  | 87.31 | True  | 3         | 0          | 0         |
| False | <NA>  | 71.09 | True  | 1         | 1          | 1         |
| False | False | 11.78 | False | 0         | 3          | 0         |
| <NA>  | False | 5.07  | True  | 1         | 1          | 1         |
| True  | False | 5.11  | True  | 2         | 1          | 0         |
| False | False | 9.55  | True  | 1         | 2          | 0         |

请问是否存在类似Excel中COUNTIF()的方法,能实现类似伪代码df['TrueCount'] = df.COUNTIF(columns=['A','B','D'], True)的逻辑?

补充说明:数据量较大(10万+行),需考虑性能。


解决方案

Pandas中可以通过矢量化操作实现类似COUNTIF的功能,这种方式性能最优,完全适配10万+行的大数据量(避免使用行级apply,因为逐行处理速度极慢)。

核心思路是:针对目标列,用条件判断生成布尔矩阵,再按行求和得到计数。

完整代码实现

import pandas as pd

# 构造示例DataFrame
data = {
    'A': [False, False, True, False, False, pd.NA, True, False],
    'B': [True, True, True, pd.NA, False, False, False, False],
    'C': [63.56, 57.13, 87.31, 71.09, 11.78, 5.07, 5.11, 9.55],
    'D': [True, pd.NA, True, True, False, True, True, True]
}
df = pd.DataFrame(data).astype({'A': 'boolean', 'B': 'boolean', 'D': 'boolean'})

# 定义目标列
target_cols = ['A', 'B', 'D']

# 统计True数量
df['TrueCount'] = df[target_cols].eq(True).sum(axis=1)
# 统计False数量
df['FalseCount'] = df[target_cols].eq(False).sum(axis=1)
# 统计Null数量
df['NullCount'] = df[target_cols].isna().sum(axis=1)

# 查看结果
print(df)

代码解释

  • df[target_cols].eq(True):生成布尔矩阵,对应位置为True表示原列值等于True,否则为False(包含Null);
  • .sum(axis=1):按行求和,统计每行中True的个数,完全对应Excel中COUNTIF的计数逻辑;
  • isna().sum(axis=1):直接统计每行中Null的数量。

这种方式基于Pandas底层矢量化运算,处理10万+行数据的速度比行级apply快数十倍,完全满足性能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:53:28