如何使用Pandas Styler通过rowspan动态合并单元格生成HTML表格
Pandas Styler合并相同日期单元格解决方案
核心逻辑:统计每个日期的出现行数,给同组第一个日期单元格添加rowspan属性跨越多行,隐藏同组剩余日期单元格,无需修改原始业务数据。
完整实现代码如下:
import pandas as pd # 1. 构造示例数据(实际使用替换为你的DataFrame) data = { "Date Weekending": ["27/08/2021", "27/08/2021", "3/09/2021", "3/09/2021", "3/09/2021"], "Action": ["Increase Output", "Decrease Output", "Make change", "Go for a hike", "Bake a cake"] } df = pd.DataFrame(data) # 2. 预计算每个日期的分组行数、首行索引和需隐藏的行索引 date_group = df.groupby("Date Weekending", sort=False) rowspan_map = {} hide_index = set() for date, group in date_group: first_idx = group.index[0] rowspan_map[first_idx] = len(group) # 同组除了首行之外的行都需要隐藏日期单元格 for idx in group.index[1:]: hide_index.add(idx) # 3. 定义单元格样式函数 def set_date_cell_style(row): idx = row.name if idx in rowspan_map: return f"rowspan: {rowspan_map[idx]}; vertical-align: middle;" elif idx in hide_index: return "display: none;" return "" # 4. 生成Styler并应用样式 styler = df.style # 仅对日期列应用合并逻辑 styler = styler.apply(set_date_cell_style, subset=["Date Weekending"], axis=1) # 可选:隐藏默认的行号列 styler = styler.hide(axis=0) # 5. 导出为HTML html_content = styler.to_html() # 可直接保存为文件打开验证效果 with open("merged_table.html", "w", encoding="utf-8") as f: f.write(html_content)
注意事项
- 如果你的原始数据中相同日期不连续,需要先执行
df = df.sort_values("Date Weekending")排序后再运行上述逻辑,避免合并错误 - 代码中添加了
vertical-align: middle让日期文字垂直居中,可根据需求自行调整样式
内容的提问来源于stack exchange,提问作者Rickyc12s
相关产品推荐
相关产品推荐

