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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:25:26