如何将DataFrame频数统计的最后n行合并为一行并生成百分比统计
实现DataFrame分类频数的合并汇总与百分比统计
可以通过以下步骤实现需求,直接运行代码即可得到目标结果:
import pandas as pd # 创建示例DataFrame df = pd.DataFrame({"category":['u','v','w','u','y','z','y','z','x','x','y','z','x','z','x']}) # 获取分类频数统计 counts = df['category'].value_counts() # 设置需要合并的末尾行数n n = 3 # 分离高频分类与待合并的低频分类 top_categories = counts.iloc[:-n] other_total = counts.iloc[-n:].sum() # 合并为新的统计结果 merged_counts = pd.concat( [top_categories, pd.Series([other_total], index=[f'Other ({n})'])], axis=0 ) # 计算百分比并格式化为带%的字符串 total = merged_counts.sum() percentage = (merged_counts / total * 100).round().astype(int).astype(str) + '%' # 组合成最终的DataFrame result = pd.DataFrame({'count': merged_counts, 'pct': percentage}) print(result)
运行后输出:
count pct z 4 27% x 4 27% y 3 20% Other (3) 4 27%
步骤说明:
- 获取频数统计:用
value_counts()直接得到各分类的出现次数,默认按降序排列。 - 分离与合并低频分类:通过
iloc[:-n]取前几行高频分类,iloc[-n:]取最后n行低频分类并求和,再用pd.concat合并成新的Series,命名为Other (n)。 - 计算百分比:用各分类的频数除以总数,乘以100后取整,再拼接%符号得到格式化的百分比字符串。
- 组合结果:将频数和百分比合并为一个DataFrame,得到规范的汇总统计表格。
内容的提问来源于stack exchange,提问作者Simon1994
相关产品推荐
相关产品推荐

