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

如何在Pandas DataFrame中按条件统计列特定值的出现次数及占比

实现方案

直接用Pandas的布尔判断和聚合方法就能搞定,步骤如下:

1. 构造示例数据(方便测试)

先造个和你描述匹配的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [0.3, 0.4, np.nan, 0.6],  # 符合条件的2个,非NaN总数3,占比≈66.7%
    'B': [0.2, 0.5, 0.5, 0.4, 0.7, 0.8, 0.9, 1.0], # 符合条件的4个,总数8,占比50%
    'C': [0.7, 0.8, np.nan, 0.9]  # 符合条件的0个,占比0%,会被排除
})

2. 统计次数和占比

# 统计每列中值≤0.5且非NaN的单元格数量
valid_counts = (df <= 0.5).sum()

# 统计每列非NaN的总单元格数
total_counts = df.count()

# 计算占比(转成百分比更直观)
ratios = (valid_counts / total_counts) * 100

# 把结果合并成表格,方便查看
stats_df = pd.DataFrame({
    '符合条件次数': valid_counts,
    '占比(%)': ratios.round(2)  # 保留两位小数
})

运行后stats_df的结果如下:

列名符合条件次数占比(%)
A266.67
B450.00
C00.00

3. 筛选达标列

直接从统计结果里挑占比≥50%的列,再提取原DataFrame的对应列:

# 筛选占比≥50%的列名
qualified_cols = stats_df[stats_df['占比(%)'] >= 50].index

# 从原DataFrame中提取这些列
filtered_df = df[qualified_cols]

最终filtered_df会只保留A、B两列,完全符合你的需求。

为啥value_counts不好用?

value_counts()是统计单个离散值的出现次数,而你的需求是统计区间范围(≤0.5)的数量,用布尔矩阵求和的方式更直接,还能自动忽略NaN值,完美匹配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:10:24