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

如何用Pandas结合xlsxwriter合并Excel首列相同连续值后导出

解决方法

你当前代码的核心问题是没有主动调用xlsxwriter的单元格合并接口,Pandas本身没有自动合并连续重复值的内置配置,需要手动计算连续相同值的区间后手动合并。

完整可运行代码

import pandas as pd

# 读取数据
df = pd.read_excel("Modules.xlsx")
index_col = df.columns[0]

# 计算第一列连续相同值的起止行(对应Excel的行索引,表头占第0行,数据从第1行开始)
merge_groups = []
current_value = df.iloc[0, 0]
start_row = 1

for i in range(1, len(df)):
    if df.iloc[i, 0] != current_value:
        merge_groups.append((current_value, start_row, i))
        current_value = df.iloc[i, 0]
        start_row = i + 1
# 补充最后一组
merge_groups.append((current_value, start_row, len(df)))

with pd.ExcelWriter("excel_file.xlsx", engine="xlsxwriter") as writer:
    # 写入除首列外的其他数据,从第1列开始写,跳过首列留待后面合并写入
    df.iloc[:, 1:].to_excel(writer, sheet_name="Inventories", index=False, startcol=1)
    ws = writer.sheets["Inventories"]
    
    # 写入首列表头
    ws.write(0, 0, index_col)
    
    # 定义合并单元格格式,设置垂直居中保持和其他单元格样式一致
    merge_format = writer.book.add_format({"valign": "vcenter", "border": 1})
    
    # 批量合并单元格
    for val, start, end in merge_groups:
        ws.merge_range(start, 0, end, 0, val, merge_format)

关键说明

  • 你之前的代码只是按原样导出数据,没有实现合并的核心逻辑,必须手动遍历第一列计算连续相同值的区间
  • 调用xlsxwriter的merge_range方法可以实现指定区间的单元格合并,配套的格式配置可以保证合并后内容的对齐效果和默认样式统一
  • 导出时先跳过首列,合并完成后再写入首列内容,可以避免重复写入相同值导致的内容异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:05