使用Python(Pandas/xlwings)创建指定层级数据透视表遇问题求助
解决Python创建层级数据透视表的问题
一、Pandas实现层级透视表并导出为Excel层级格式
你当前的pivot_table代码已经生成了多级索引的透视表,但直接输出或导出时如果没启用合并单元格,就看不到Excel式的折叠层级。调整代码如下:
import pandas as pd # 生成透视表,明确聚合函数(按需替换为mean/count等) pivot_df = pd.pivot_table( df, index=['ROC | Channel Type', 'Revised Request Type', 'Reference Number', 'ROC | Country name'], values=['Pre Production Actual', 'Pre-Prod Target Tat'], aggfunc='sum' ) # 导出至Excel,启用合并单元格自动生成层级结构 pivot_df.to_excel('pivot_result.xlsx', merge_cells=True)
导出后的Excel文件会自动合并相同父级的单元格,形成可折叠的层级结构,和手动创建的透视表效果一致。
二、修复xlwings的AddDataField数字格式错误
你遇到的com_error通常是参数传递不符合Excel API要求,尤其是聚合函数常量、数字格式字符串的问题,调整代码示例如下:
import xlwings as xw # 打开Excel并写入原始数据 wb = xw.Book() ws = wb.sheets[0] ws.range('A1').value = df # 创建透视缓存与透视表 pivot_cache = wb.api.PivotCaches().Create(SourceType=1, SourceData=ws.used_range) pivot_table = pivot_cache.CreatePivotTable(TableDestination=ws.range('F1'), TableName='HierarchyPivot') # 添加行层级字段 for field_name in ['ROC | Channel Type', 'Revised Request Type', 'Reference Number', 'ROC | Country name']: pivot_table.PivotFields(field_name).Orientation = 1 # xlRowField对应常量1 # 添加值字段并设置格式(先确保聚合函数用Excel常量,格式用Excel规范字符串) # xlSum对应常量4,如需其他聚合函数可替换:xlAverage=1, xlCount=2等 actual_field = pivot_table.PivotFields('Pre Production Actual') pivot_table.AddDataField(actual_field, 'Pre Production Actual', 4).NumberFormat = '0.00' target_field = pivot_table.PivotFields('Pre-Prod Target Tat') pivot_table.AddDataField(target_field, 'Pre-Prod Target Tat', 4).NumberFormat = '0.00' wb.save('xlwings_pivot.xlsx')
关键注意点:
- 聚合函数必须用Excel API对应的常量(如
sum对应4),不能用字符串'sum' - 数字格式必须符合Excel规范,比如保留两位小数用
'0.00',千分位用'#,##0',不能用Python的格式化语法 - 字段名称必须和原始数据的列名完全一致,包括空格、特殊字符
内容的提问来源于stack exchange,提问作者Mani
相关产品推荐
相关产品推荐

