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

如何用Pandas处理DataFrame并生成合并重复单元格的HTML表格?

解决思路与实现步骤

一、过滤DataFrame(筛选目标列/行)

筛选需要展示的列直接通过列索引即可,若需同时过滤行(如时间范围、事件类型),结合布尔索引实现:

示例代码

# 假设原始数据为df,筛选目标列(比如timestamp_utc、symbol、event、value)
selected_df = df[['timestamp_utc', 'symbol', 'event', 'value']]

# 若需附加行过滤条件(比如筛选2024年上半年的事件)
selected_df = selected_df[
    (selected_df['timestamp_utc'] >= '2024-01-01') & 
    (selected_df['timestamp_utc'] <= '2024-06-30')
]

# 若要合并非连续的相同值,先按目标列排序(确保相同值连续)
selected_df = selected_df.sort_values(by=['symbol', 'timestamp_utc'])

二、合并相同值的单元格(生成带合并效果的HTML表格)

Pandas没有内置直接合并单元格的函数,但可以通过Styler自定义CSS样式实现——核心是计算连续重复值的分组,给组内第一个单元格设置rowspan属性,隐藏后续重复单元格:

实现代码

import pandas as pd

def calculate_rowspan(df, target_col):
    # 标记连续相同值的分组ID
    group_ids = df[target_col].ne(df[target_col].shift()).cumsum()
    # 计算每个分组的行数
    group_counts = group_ids.value_counts().sort_index()
    # 生成每个单元格的rowspan值:组首单元格为分组行数,其余为0(后续隐藏)
    rowspan_list = []
    current_group = None
    for gid in group_ids:
        if gid != current_group:
            current_group = gid
            rowspan_list.append(group_counts[gid])
        else:
            rowspan_list.append(0)
    return rowspan_list

def apply_merge_style(df, merge_columns):
    styler = df.style
    for col in merge_columns:
        colspan = df.columns.get_loc(col) + 1  # HTML列索引从1开始
        rowspan_list = calculate_rowspan(df, col)
        
        # 给组首单元格设置rowspan属性
        styler.set_table_styles([
            {
                'selector': f'td:nth-child({colspan}):nth-of-type({i+1})',
                'props': [('rowspan', str(rowspan_list[i]))]
            }
            for i in range(len(rowspan_list)) if rowspan_list[i] > 1
        ], overwrite=False)
        
        # 隐藏重复的单元格(rowspan为0的项)
        styler.applymap(
            lambda val, idx: 'display: none;' if rowspan_list[idx] == 0 else '',
            subset=pd.IndexSlice[:, col],
            idx=df.index
        )
    return styler

# 使用示例:合并symbol和timestamp_utc列的重复单元格
merged_styler = apply_merge_style(selected_df, ['symbol', 'timestamp_utc'])
# 生成最终HTML表格
html_table = merged_styler.to_html()

关键说明

  1. 仅对连续出现的相同值生效,若需合并非连续的相同值,必须先对目标列排序(如示例中的sort_values)。
  2. Styler生成的HTML会保留合并单元格的样式,直接嵌入网页即可展示效果。
  3. 若需合并列方向的重复值(colspan),逻辑类似,只需计算列方向的分组并设置colspan属性。

内容的提问来源于stack exchange,提问作者Bruce Ecurb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:51:27