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

