如何批量统计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
相关产品推荐
相关产品推荐

