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

如何批量统计pandas DataFrame各列符合指定条件的行数?

Pandas DataFrame 逐列条件行数统计问题

我需要统计pandas DataFrame中每列符合对应条件的行数,具体包含两个需求:

  • 统计各列非NaN值的数量,预期结果为[3, 3]
  • 统计各列非零数值的数量,预期结果为[2, 3]

示例DataFrame代码

import numpy as np
import pandas as pd

# Sample DataFrame
data = [[1, 2], [0, 3], [np.nan, np.nan], [1, -1]]
index = ['i1', 'i2', 'i3', 'i4']
columns = ['c1', 'c2']
df = pd.DataFrame(data, index=index, columns=columns)
print(df)

输出结果

c1   c2
i1  1.0  2.0
i2  0.0  3.0
i3  NaN  NaN
i4  1.0 -1.0

已尝试的逐列处理代码

针对问题1(非NaN值统计)

print(df[df['c1'].apply(lambda x: not pd.isna(x))].count())

针对问题2(非零数值统计)

print(df[df['c1'] != 0].count())

目前仅能逐列处理,寻求一次性统计所有列的方法。

环境信息:Python 3.10.5,pandas 1.4.3

解决方案

问题1:一次性统计所有列非NaN值数量

直接调用DataFrame的count()方法,该方法默认跳过NaN值,返回每列非缺失值的数量:

non_nan_counts = df.count().tolist()
print(non_nan_counts)  # 输出: [3, 3]

问题2:一次性统计所有列非零数值数量

先用ne(0)生成布尔值DataFrame(非零元素对应True),再通过sum()统计每列True的数量(NaN会被判定为False,不纳入统计):

non_zero_counts = df.ne(0).sum().tolist()
print(non_zero_counts)  # 输出: [2, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:06:29