如何在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
相关产品推荐
相关产品推荐

