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
相关产品推荐
相关产品推荐

