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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:18:02