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

pandas配合xlsxwriter导出Excel时如何修改代码实现多列按值合并行

多列行合并实现方案

你提到的多列层级行合并效果,可通过调整连续重复区间的计算逻辑实现,完整代码如下:

import pandas as pd
import xlsxwriter

# 替换为你的实际数据读取逻辑,比如 pd.read_excel('你的原始文件.xlsx')
df = pd.DataFrame({
    '大类': ['水果', '水果', '水果', '蔬菜', '蔬菜'],
    '小类': ['苹果', '苹果', '香蕉', '白菜', '萝卜'],
    '销量': [120, 80, 95, 60, 75]
})

# 初始化Excel写入器
writer = pd.ExcelWriter('合并结果.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='数据', index=False)
workbook = writer.book
worksheet = writer.sheets['数据']

# 定义合并单元格样式,可按需调整
merge_style = workbook.add_format({
    'align': 'center',
    'valign': 'vcenter',
    'border': 1
})

def merge_continuous_rows(col_index, df, worksheet, style):
    """
    合并指定列的连续重复行
    col_index: 要合并的列的索引,从0开始计数
    """
    # 数据起始行(跳过表头,xlsxwriter行号从0开始,表头为第0行,数据从第1行开始)
    start_row = 1
    current_value = df.iloc[0, col_index]
    total_data_rows = len(df)
    
    for row in range(1, total_data_rows):
        current_row_value = df.iloc[row, col_index]
        if current_row_value != current_value:
            # 区间内有多行才需要合并
            if start_row != row - 1:
                worksheet.merge_range(
                    start_row, col_index,
                    row - 1, col_index,
                    current_value, style
                )
            start_row = row
            current_value = current_row_value
    # 处理最后一段连续值
    if start_row != total_data_rows - 1:
        worksheet.merge_range(
            start_row, col_index,
            total_data_rows, col_index,
            current_value, style
        )

# 按层级从左到右依次合并需要的列
merge_continuous_rows(0, df, worksheet, merge_style)
merge_continuous_rows(1, df, worksheet, merge_style)

writer.close()

注意事项

  • 按从左到右的层级顺序调用merge_continuous_rows函数即可,需要合并几列就调用几次
  • 如果你的原始数据没有排序,需要先按要合并的列排序后再执行合并逻辑,避免出现同值不连续无法合并的问题
  • 样式可通过修改merge_style的参数自定义,比如设置背景色、字体大小等

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 19:48:02