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

如何在Python中生成指定分类的频率表(含频数与占比,排除0值)

我来帮你搞定这个频率表的问题!这里有两种实用的Python实现方案,不管是用原生代码还是数据分析常用的pandas库,都能精准得到你想要的结果:

方法一:纯Python原生实现(无需额外库)

如果不想安装第三方库,用原生代码就能完成需求,逻辑清晰易懂:

# 你的示例数据
data = [1,2,3,4,5,5,5,8,8,8,0,9,10,2,2,10,10,7,7,7,7,9]

# 第一步:过滤掉数值0
filtered_data = [num for num in data if num != 0]
total_count = len(filtered_data)  # 过滤后总共有21个数据

# 初始化三个类别的计数器
cat1_count = 0
cat2_count = 0
cat3_count = 0

# 遍历数据,按规则分类计数
for num in filtered_data:
    if num < 5.5:
        cat1_count += 1
    elif 5.5 < num < 8:  # 严格介于5.5和8之间,不包含边界值
        cat2_count += 1
    else:  # 8或更高的数值
        cat3_count += 1

# 计算百分比(四舍五入到整数)
cat1_pct = round((cat1_count / total_count) * 100)
cat2_pct = round((cat2_count / total_count) * 100)
cat3_pct = round((cat3_count / total_count) * 100)

# 按照你想要的格式输出结果
print(f"Category 1:频数{cat1_count}/{cat1_pct}%")
print(f"Category 2:频数{cat2_count}/{cat2_pct}%")
print(f"Category 3:频数{cat3_count}/{cat3_pct}%")

运行这段代码后,会直接输出你期望的结果:

Category 1:频数9/43%
Category 2:频数4/19%
Category 3:频数8/38%
方法二:用Pandas快速实现(适合数据分析场景)

如果你平时经常处理数据,用pandas库会更高效,代码更简洁,尤其适合大规模数据集:

首先确保你已经安装了pandas(pip install pandas),然后运行以下代码:

import pandas as pd

# 你的示例数据
data = [1,2,3,4,5,5,5,8,8,8,0,9,10,2,2,10,10,7,7,7,7,9]

# 转为pandas Series并过滤0
data_series = pd.Series(data)
filtered_series = data_series[data_series != 0]

# 定义分类规则函数
def get_category(num):
    if num < 5.5:
        return "Category 1"
    elif 5.5 < num < 8:
        return "Category 2"
    else:
        return "Category 3"

# 给每个数据打分类标签
category_labels = filtered_series.apply(get_category)

# 计算频数和占比
frequency = category_labels.value_counts().rename("频数")
percentage = category_labels.value_counts(normalize=True).mul(100).round().rename("占比(%)")

# 合并成完整的频率表
frequency_table = pd.concat([frequency, percentage], axis=1)
# 按你想要的类别顺序排序(避免value_counts的降序排列)
frequency_table = frequency_table.reindex(["Category 1", "Category 2", "Category 3"])

# 格式化输出结果
for category, row in frequency_table.iterrows():
    print(f"{category}:频数{row['频数']}/{int(row['占比(%)'])}%")

这段代码同样会输出符合你要求的结果,而且后续如果需要处理更大的数据集,只需要替换data变量即可,扩展性更强。

注意:两种方法的分类逻辑完全匹配你的要求:Category 1包含小于5.5的数(比如5),Category 2包含大于5.5且小于8的数(比如7),Category 3包含8及以上的数(比如8、9、10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:37:36