如何将DataFrame值计数与百分比并列并设置百分比格式输出Excel
解决值计数与百分比对应排版及格式化问题
原代码将每列的计数结果和百分比结果分别作为独立DataFrame拼接,导致出现重复的类别列(多余的蓝色框),且未对百分比进行格式化。以下是修正后的实现方案:
修改后的核心代码
import pandas as pd li = [] for col in df.columns: # 获取值计数并整理列名 value_counts = df[col].value_counts().reset_index() value_counts.columns = ['类别', f'{col}_计数'] # 获取百分比并整理列名 value_percentage = df[col].value_counts(normalize=True).reset_index() value_percentage.columns = ['类别', f'{col}_百分比'] # 合并计数与百分比,避免重复类别列 merged_col_data = pd.merge(value_counts, value_percentage, on='类别') li.append(merged_col_data) # 横向拼接所有列的统计结果 data = pd.concat(li, axis=1)
百分比格式化处理
提供两种格式化方式,按需选择:
方式1:直接将小数转为带%的字符串
适合不需要保留数值格式的场景:
# 遍历所有百分比列进行格式化 for col_name in data.columns: if '百分比' in col_name: data[col_name] = data[col_name].apply(lambda x: f'{x:.2%}')
方式2:输出Excel时设置单元格格式(推荐)
保留数值格式,方便后续二次处理:
from openpyxl import load_workbook from openpyxl.styles import numbers # 先导出原始数据到Excel data.to_excel('统计结果.xlsx', index=False) # 加载工作簿并设置百分比格式 wb = load_workbook('统计结果.xlsx') ws = wb.active # 识别百分比列并设置格式 for col in ws.iter_cols(): header = col[0].value if header and '百分比' in header: # 跳过表头,给数据行设置百分比格式 for cell in col[1:]: cell.number_format = '0.00%' wb.save('统计结果.xlsx')
关键修改说明
- 直接遍历列名替代索引,代码更直观易读
- 重命名计数、百分比列,避免默认列名混乱
- 通过
merge合并同一列的计数与百分比数据,确保类别列唯一,消除多余重复列 - 提供两种百分比格式化方案,适配不同需求
内容的提问来源于stack exchange,提问作者user16239103
相关产品推荐
相关产品推荐

