如何在同一DataFrame中合并表头B对应的多列单元格?
解决表格表头合并问题
问题分析
你需要将表格中Header B、Unnamed:1、Unnamed:2、Unnamed3四列的表头统一为Header B并实现合并显示,np.concatenation不适合处理这类表格结构与样式调整,推荐用pandas来完成。
代码实现步骤
- 构造/读取数据
先把你的数据转换成pandas.DataFrame:
import pandas as pd data = { 'Header A': ['Ship Mode', 'Order ID', 'order 1', 'order 2'], 'Header B': ['First Class', '', 20.00, 40.00], 'Unnamed:1': ['Second Class', '', 30.00, 30.00], 'Unnamed:2': ['Third Class', '', 40.00, 40.00], 'Unnamed3': ['Premium', '', 50.00, 50.00], 'Header C': ['-', '', 'sum', 'sum'] } df = pd.DataFrame(data)
- 修改列名
将所有Unnamed开头的列名替换为Header B:
df.columns = ['Header A', 'Header B', 'Header B', 'Header B', 'Header B', 'Header C']
- 实现表头合并样式
用pandas.Styler设置表头合并的显示效果:
def merge_header(styler): # 调整表头边框,模拟合并效果 styler.set_table_styles([ {'selector': 'th.col_1, th.col_2, th.col_3, th.col_4', 'props': [('text-align', 'center')]}, {'selector': 'th.col_1', 'props': [('border-right', 'none')]}, {'selector': 'th.col_2, th.col_3', 'props': [('border-left', 'none'), ('border-right', 'none')]}, {'selector': 'th.col_4', 'props': [('border-left', 'none')]} ]) styler.set_properties(**{'text-align': 'center'}) return styler # 应用样式并显示 styled_table = df.style.pipe(merge_header) styled_table
最终效果(HTML表格实现)
如果需要直接生成符合需求的HTML表格,可以用以下代码输出:
# 生成合并表头的HTML html_table = """ <div class="s-table-container"> <table class="s-table"> <thead> <tr> <th>Header A</th> <th colspan="4">Header B</th> <th>Header C</th> </tr> <tr> <th></th> <th>First Class</th> <th>Second Class</th> <th>Third Class</th> <th>Premium</th> <th></th> </tr> </thead> <tbody> <tr> <td>Order ID</td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>order 1</td> <td>20.00</td> <td>30.00</td> <td>40.00</td> <td>50.00</td> <td>sum</td> </tr> <tr> <td>order 2</td> <td>40.00</td> <td>30.00</td> <td>40.00</td> <td>50.00</td> <td>sum</td> </tr> </tbody> </table> </div> """ print(html_table)
内容的提问来源于stack exchange,提问作者Imran Mohammed
相关产品推荐
相关产品推荐

