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

如何合并Pandas DataFrame中的列?实现指定格式的表格转换

解决Pandas DataFrame转换为目标表格样式的方案

嘿,我懂你想把手里的Pandas DataFrame改成特定样式的表格——虽然看不到你贴的原始和目标图,但我拿一组常见的场景来演示,你可以直接套用到自己的数据上!

两种常见场景的处理方式

1. 视觉样式调整(类似Excel的单元格合并、格式美化)

如果你的需求是不改变DataFrame的数据结构,只调整视觉展示样式(比如合并同类别单元格、添加边框、美化表头),可以用Pandas内置的Styler工具来实现:

首先先模拟一个示例原始DataFrame:

import pandas as pd

# 模拟你的原始DataFrame
df = pd.DataFrame({
    '类别': ['水果', '水果', '蔬菜', '蔬菜'],
    '名称': ['苹果', '香蕉', '胡萝卜', '西兰花'],
    '单价': [5, 3, 2, 4],
    '库存': [100, 150, 200, 80]
})

然后编写样式函数,实现类似Excel的合并单元格效果(视觉上合并同类别单元格):

# 定义样式函数:合并相同值的单元格
def merge_duplicate_cells(column):
    # 仅针对"类别"列处理
    if column.name == '类别':
        styles = []
        for i in range(len(column)):
            # 如果当前行和下一行值相同,就去掉底部边框,模拟合并效果
            if i != len(column)-1 and column.iloc[i] == column.iloc[i+1]:
                styles.append('border-bottom: none;')
            else:
                styles.append('border-bottom: 1px solid #ddd;')
        return styles
    # 其他列保持默认样式
    return [''] * len(column)

# 应用样式并美化表格
styled_table = df.style.apply(merge_duplicate_cells, axis=0)\
              .set_table_styles([
                  # 设置表头样式
                  {'selector': 'th', 'props': [('background-color', '#f5f5f5'), ('font-weight', 'bold'), ('padding', '8px'), ('border', '1px solid #ddd')]},
                  # 设置单元格样式
                  {'selector': 'td', 'props': [('padding', '8px'), ('border', '1px solid #ddd')]}
              ])\
              .hide(axis='index')  # 隐藏索引列

# 在Jupyter环境中直接运行即可看到样式效果,也可以导出为HTML保存
styled_table

2. 数据结构调整(重组行列、分组展示)

如果你的目标样式需要改变DataFrame的结构(比如把类别作为层级表头、重组行列顺序),可以先通过groupby或pivot_table调整数据结构,再美化样式:

# 按"类别"分组重组数据结构
grouped_df = df.groupby('类别').apply(lambda x: x.drop('类别', axis=1)).unstack(level=0)
# 调整列名层级,让类别作为上层表头
grouped_df.columns = grouped_df.columns.map(lambda x: (x[1], x[0]))
grouped_df = grouped_df.swaplevel(0, 1, axis=1).sort_index(axis=1)

# 给重组后的DataFrame应用样式
grouped_styled = grouped_df.style.set_table_styles([
    {'selector': 'th', 'props': [('background-color', '#f5f5f5'), ('font-weight', 'bold'), ('padding', '8px')]},
    {'selector': 'td', 'props': [('padding', '8px'), ('border', '1px solid #ddd')]}
])

你可以根据自己的实际原始DataFrame和目标样式,调整上述代码中的列名、分组逻辑或样式规则即可。

内容的提问来源于stack exchange,提问作者Phuong Duyen Huynh Ngoc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:34:32