Pandas DataFrame是否支持rowspan或表格单元格合并功能?
实现Pandas表格的跨行单元格合并
要实现你想要的跨行单元格效果,Pandas原生DataFrame默认渲染不会自动合并重复的多层索引单元格,但可以通过以下两种方式达成目标:
1. 在Jupyter/HTML中实现视觉跨行合并(用Styler)
通过Styler自定义CSS样式,让重复的第一级索引单元格呈现跨行合并的视觉效果:
import pandas as pd # 构造带多层索引的DataFrame idx = pd.MultiIndex.from_tuples([('LCS', 'sequence1'), ('LCS', 'sequence2')], names=['', '']) cols = pd.Index(['alignment', 'score', 'pathcoordinates'], name='') data = [['AAAGT', '', ''], ['GGTAC', 5, '[4,5] -> [5,5]']] df1 = pd.DataFrame(data, index=idx, columns=cols) # 定义跨行合并的样式函数 def merge_index_cells(styler): idx_level_0 = df1.index.get_level_values(0) style_rules = [] # 为重复索引行设置无边框,实现视觉合并 for i in range(1, len(df1)): if idx_level_0[i] == idx_level_0[i-1]: style_rules.append({ 'selector': f'.row{i}', 'props': [('vertical-align', 'middle'), ('border-bottom', 'none')] }) else: style_rules.append({ 'selector': f'.row{i-1}', 'props': [('border-bottom', '1px solid #ccc')] }) # 为第一行和最后一行补充边框样式 style_rules.extend([ {'selector': '.row0', 'props': [('vertical-align', 'middle')]}, {'selector': f'.row{len(df1)-1}', 'props': [('border-bottom', '1px solid #ccc')]} ]) styler.set_table_styles(style_rules, overwrite=False) return styler # 应用样式后展示表格 df1.style.pipe(merge_index_cells)
2. 导出到Excel时实现真实跨行合并
如果需要导出到Excel文件,可借助xlsxwriter引擎直接合并指定单元格:
# 导出到Excel并合并单元格 with pd.ExcelWriter('merged_lcs_table.xlsx', engine='xlsxwriter') as writer: df1.to_excel(writer, sheet_name='LCS_Result') workbook = writer.book worksheet = writer.sheets['LCS_Result'] # 合并第一列第2-3行(对应LCS的跨行单元格) worksheet.merge_range('A2:A3', 'LCS') # 可选:设置单元格垂直居中 cell_format = workbook.add_format({'valign': 'vcenter'}) worksheet.set_row(1, None, cell_format) worksheet.set_row(2, None, cell_format)
两种方式分别对应交互式展示和文件导出场景,可根据需求选择使用。
内容的提问来源于stack exchange,提问作者Kactaceapengu
相关产品推荐
相关产品推荐

