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

Pandas教程:如何将DataFrame中相同值单元格合并为单个单元格

解决方案

核心思路

问题根源是唯一ID的唯一性导致分组后无法合并同组行,所以需要先对数据做聚合处理,再通过Pandas的样式功能实现目标格式,最后导出HTML用于报告。

步骤1:数据聚合(消除唯一ID干扰)

假设你的DataFrame列结构为 [分组列1, 分组列2, 唯一ID, 指标列1, 指标列2,...],先按前两列分组,对指标列做聚合(根据业务需求选择sum/max/字符串拼接等),唯一ID如果不需要展示可直接排除:

import pandas as pd

# 假设原始DataFrame为df
agg_df = df.groupby(['分组列1', '分组列2']).agg(
    指标列1=('指标列1', 'sum'),  # 替换为符合业务的聚合函数
    指标列2=('指标列2', 'sum')
).reset_index()

如果需要保留同组的唯一ID(比如用逗号拼接所有ID),可以这样写:

agg_df = df.groupby(['分组列1', '分组列2']).agg(
    唯一ID集合=('唯一ID', ', '.join),
    指标列1=('指标列1', 'sum'),
    指标列2=('指标列2', 'sum')
).reset_index()

步骤2:设置多级索引并调整样式

通过Pandas的style模块配置合并单元格、缩进等样式,匹配你的目标格式:

# 设置多级索引
agg_df = agg_df.set_index(['分组列1', '分组列2'])

# 配置HTML样式:合并相同分组列1的单元格、缩进分组列2
html_table = agg_df.style.set_table_styles(
    [
        # 表头样式
        {'selector': 'thead th', 'props': [('background-color', '#f5f5f5'), ('border', '1px solid #ddd')]},
        # 分组列1合并后垂直居中
        {'selector': 'th.level0', 'props': [('vertical-align', 'middle'), ('border', '1px solid #ddd')]},
        # 分组列2缩进显示
        {'selector': 'th.level1', 'props': [('padding-left', '25px'), ('border', '1px solid #ddd')]},
        # 数据单元格样式
        {'selector': 'td', 'props': [('border', '1px solid #ddd')]}
    ]
).merge_cells(rows=True)  # 合并同组的行单元格,避免重复显示分组内容

# 若需隐藏某个索引层级(比如只展示分组列1的合并单元格),可取消下方注释
# html_table = html_table.hide(axis='index', level=0)

步骤3:导出为HTML

将样式化后的表格转为HTML字符串,直接用于报告:

html_output = html_table.to_html()

# 也可保存为本地HTML文件
with open('report_table.html', 'w', encoding='utf-8') as f:
    f.write(html_output)

关键说明

  • merge_cells(rows=True) 是实现同组行单元格合并的核心,确保相同分组的内容不会重复显示。
  • 聚合函数的选择要贴合业务场景,数值类用sum/avg,字符串类用join。
  • 若目标样式有特殊格式(如配色、字体),可在set_table_styles中添加更多CSS属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:30:13