Python操作Excel数据分组的完整指南

 更新时间:2026年05月30日 09:48:35   作者:Eiceblue  
在日常数据处理工作中,Excel 数据分组是一项高频使用的功能,本文将系统介绍使用 Python代 码实现 Excel 数据分组的方法并提供完整代码示例,希望对大家有所帮助

在日常数据处理工作中,Excel 数据分组是一项高频使用的功能。当面对包含大量明细数据的表格时,仅靠原始数据视图往往难以快速把握整体结构和汇总信息。Excel 的分组功能允许用户将相邻的行或列组织为可折叠/展开的层级结构,从而在宏观汇总与微观明细之间灵活切换。典型的应用场景包括:

  • 销售报表按地区分组
  • 财务报表按月度分组
  • 库存报表按品类分组等。

无论是业务人员直接在 Excel 中手动操作,还是开发者通过代码批量处理,掌握数据分组功能背后的实现逻辑都至关重要。本文将系统介绍使用 Python代 码实现 Excel 数据分组的方法,提供完整代码示例。

一、Excel 内置数据分组功能

1.1 行分组与列分组

在 Excel 中,数据分组主要通过 “数据” 选项卡下的 “组合” 功能完成。用户可以选中连续的行或列,点击“分组”按钮后,Excel 会在行号左侧或列标上方自动生成 “—” 形状的控制按钮,单击该按钮即可折叠或展开分组区域。反向操作选择 “取消组合”,即可解除分组状态。

1.2 分类汇总

分类汇总是 Excel 中一个更高级的数据分组功能。当用户需要对某一列的数据按特定字段进行分组汇总时,可以通过“数据”→“分类汇总”菜单进入设置界面。在该界面中,用户需要指定:

  • 分类字段(按哪个列进行分组)
  • 汇总方式(求和、平均值、计数、最大值、最小值等)
  • 选定汇总项(对哪些列进行汇总计算)

Excel 自动为每个分组插入汇总行,并生成可折叠的数据层次结构。

1.3 不足之处

Excel 手动操作的局限在于缺乏自动化能力。当需要频繁生成分组报表,或需要将分组功能嵌入数据处理流程时,手动操作显然不能满足要求。这便是 Python 的价值所在。

二、Python 实现 Excel 数据分组

Free Spire.XLS for Python 是一个专门用于操作 Excel 文件的免费 Python 库,通过pip命令即可完成安装:

pip install Spire.XLS.Free

在数据分组功能方面,该库提供了以下核心能力:

  • 对连续行或列进行基础分组
  • 创建多级嵌套分组
  • 一键生成分类汇总(Subtotal
  • 取消已有分组

下文将逐一详细介绍这些功能的代码实现。

三、使用 Free Spire.XLS 创建基础行分组

最基础的分组操作是将指定连续区域的行或列分组。Worksheet 类提供了 GroupByRows()GroupByColumns() 方法来实现这一功能。

以下示例演示如何加载一个 Excel 文件,并对其中某个连续行区域进行分组:

from spire.xls import *
from spire.xls.common import *

# 创建Workbook对象
workbook = Workbook()
# 加载Excel文件
workbook.LoadFromFile("数据.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 对第2到第10行进行分组,False表示不折叠(即默认展开状态)
sheet.GroupByRows(2, 10, False)

# 保存结果文件
workbook.SaveToFile("行分组结果.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

GroupByRows() 方法的三个参数依次为:起始行索引、结束行索引、是否折叠分组。当第三个参数为True时,分组在打开时即处于折叠状态,所有明细行被隐藏,仅显示分组摘要行。

如需对列进行分组,可调用 GroupByColumns() 方法:

# 对第4到第7列进行分组
sheet.GroupByColumns(4, 7, False)

上述代码运行后,在生成的 Excel 文件中,行号左侧或列标上方会出现分组控制按钮,用户可以手动展开或折叠分组区域。

四、创建嵌套分组

在实际业务场景中,数据往往具有多层次结构。这种嵌套分组可以通过多次调用GroupByRows()方法实现:先创建外层分组,再在外层分组内创建内层分组。

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("数据.xlsx")
sheet = workbook.Worksheets[0]

# 创建外层分组:第2到第10行(
sheet.GroupByRows(2, 10, False)

# 在外层分组内部创建嵌套分组(第3到第7行)
sheet.GroupByRows(3, 7, False)

workbook.SaveToFile("嵌套分组.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

执行上述代码后,Excel 文件中将出现内外层两级分组控制按钮。这种结构化的数据组织方式极大地提升了数据查看和报告的交互性。

五、创建分类汇总

分类汇总(Subtotal)是比单纯行分组更高级的功能,它不仅自动生成分组结构,还在每个分组后插入汇总行,并根据指定的汇总方式计算数值。Worksheet.Subtotal()方法正是为此设计的。

假设有如下图所示的销售数据表格(示例数据结构):

行号地区销售人员销售额订单数量
1华东张三1250015
2华东李四980012
3华南王五1570018
4华南赵六1120014

按“地区”字段进行分组并对“销售额”求和,是典型的分类汇总需求。实现代码如下:

from spire.xls import *
from spire.xls.common import *

# 创建Workbook对象并加载Excel文件(假设该文件包含上述示例数据)
workbook = Workbook()
workbook.LoadFromFile("销售明细.xlsx")
sheet = workbook.Worksheets[0]

# 定义需要进行分类汇总的数据区域
# 区域为 A2 到 D5(仅数据行)
data_range = sheet.Range["A2:D5"]

# 调用完整参数的 Subtotal 方法
# 参数说明:
#   data_range        : 要处理的单元格区域,本例为 A1:D5
#   groupByIndex      : 分组列在区域内的索引(0-based),1 表示区域内的第2列(B列,即“地区”列)
#   totalFields       : 需要汇总的列索引列表(0-based),[3] 表示区域内的第4列(D列,即“销售额”列)
#   subtotalType      : 汇总类型,SubtotalTypes.Sum 表示求和
#   replace           : 是否替换现有的分类汇总,True 表示替换
#   addPageBreak      : 是否在每组后添加分页符,False 表示不添加
#   addsummaryBelowData : 是否将汇总行显示在数据下方,True 表示汇总行位于明细数据下方
sheet.Subtotal(data_range, 1, [3], SubtotalTypes.Sum, True, False, True)

workbook.SaveToFile("分类汇总结果.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

执行结果说明:

运行上述代码后,生成的 Excel 文件中的表格将被转换为以下结构:

六、取消分组

当需要移除现有分组时,可使用 UngroupByRows()UngroupByColumns() 方法:

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("已分组文件.xlsx")
sheet = workbook.Worksheets[0]

# 取消第2到第10行的分组
sheet.UngroupByRows(2, 10)
# 取消第2到第4列的分组
sheet.UngroupByColumns(2, 4)

workbook.SaveToFile("取消分组后.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

UngroupByRows() 的参数只需指定起始行和结束行,方法会移除该范围内的所有分组,恢复到未分组状态。

小结

本文系统介绍了在 Python 中实现 Excel 数据分组功能的方法。通过 GroupByRows()GroupByColumns()Subtotal() 等方法,开发者可以以纯代码的方式完成行分组、列分组、嵌套分组以及分类汇总等常见数据处理任务,生成可直接交付使用的带有分组结构的 Excel 报表。

到此这篇关于Python操作Excel数据分组的完整指南的文章就介绍到这了,更多相关Python Excel数据分组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python的字符串操作简单实例

    Python的字符串操作简单实例

    这篇文章主要介绍了Python的字符串操作简单实例,字符串有许多种操作方式,本文带来几个操作实例,快来一起看看吧
    2023-04-04
  • 使用Python生成随机图片验证码的代码详解

    使用Python生成随机图片验证码的代码详解

    当我们在写一个Web项目的时候一般要写登录操作,而为了安全起见,现在的登录功能都会加上输入图片验证码这一功能,所以本文就给大家介绍一下如何使用Python生成随机图片验证码,需要的朋友可以参考下
    2023-07-07
  • Python学习笔记之列表推导式实例分析

    Python学习笔记之列表推导式实例分析

    这篇文章主要介绍了Python学习笔记之列表推导式,结合实例形式分析Python列表推导式的原理、写法与相关使用技巧,需要的朋友可以参考下
    2019-08-08
  • Python求均值,方差,标准差的实例

    Python求均值,方差,标准差的实例

    今天小编就为大家分享一篇Python求均值,方差,标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 基于打开pycharm有带图片md文件卡死问题的解决

    基于打开pycharm有带图片md文件卡死问题的解决

    这篇文章主要介绍了基于打开pycharm有带图片md文件卡死问题的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • PyQt5执行耗时操作导致界面卡死或未响应的原因及解决办法

    PyQt5执行耗时操作导致界面卡死或未响应的原因及解决办法

    这篇文章主要给大家介绍了关于PyQt5执行耗时操作导致界面卡死或未响应的原因及解决办法,由于耗时的操作会独占系统cpu资源,让界面卡死在那里,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Python内省与反射巧妙运用示例

    Python内省与反射巧妙运用示例

    这篇文章主要为大家介绍了Python内省与反射巧妙运用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 基于PyQt5制作Excel文件数据去重小工具

    基于PyQt5制作Excel文件数据去重小工具

    这篇文章主要介绍了如何利用PyQt5模块制作一个Excel文件数据去重小工具,可以将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定,需要的可以参考一下
    2022-04-04
  • 在Lighttpd服务器中运行Django应用的方法

    在Lighttpd服务器中运行Django应用的方法

    这篇文章主要介绍了在Lighttpd服务器中运行Django应用的方法,本文所采用的是最流行的FastCGI模块,包括同时运行多个Django应用的方法,需要的朋友可以参考下
    2015-07-07
  • Python通过poplib库实现POP3邮件收取的完整流程

    Python通过poplib库实现POP3邮件收取的完整流程

    本文介绍了Python中通过poplib模块实现POP3协议邮件收取的完整流程,首先概述了POP3协议的特点(端口110/995、邮件下载后本地存储),对比了与IMAP的区别,详细讲解了poplib的核心API,需要的朋友可以参考下
    2025-09-09

最新评论