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

如何用Pandas实现两列DataFrame的层级式单列输出(含折叠高亮)

问题:将Pandas DataFrame转换为层级式单列格式并实现高亮与折叠功能

原始DataFrame

Unnamed: 0Unnamed: 1
Bb
Cb
Db
Ec
Fc

期望输出格式

content
b
B
C
D
c
E
F

要求实现:

  • 小写字母行高亮
  • 支持展开/折叠小写字母对应的下方内容

你尝试用pivot_table得到的是合并后的两列结果,不符合需求,以下是纯Pandas的解决方案:


解决方案

1. 读取/构造数据(替换为你的Excel读取逻辑)

import pandas as pd

# 替换为你的实际读取代码
# df = pd.read_excel(r'xxxxx.xlsx')[['Unnamed: 0','Unnamed: 1']]
data = {
    'Unnamed: 0': ['B', 'C', 'D', 'E', 'F'],
    'Unnamed: 1': ['b', 'b', 'b', 'c', 'c']
}
df = pd.DataFrame(data)

2. 生成带折叠功能的层级式单列结构

通过分组遍历,先添加分组标签行,再添加组内内容行,同时设置多级索引来触发Jupyter Notebook的原生折叠功能:

result_data = []

# 按分组键遍历,保留原始数据顺序
for group_key, group_df in df.groupby('Unnamed: 1', sort=False):
    # 添加分组标签行(作为折叠的父节点)
    result_data.append((group_key, ''))
    # 添加组内的每个内容行
    for item in group_df['Unnamed: 0']:
        result_data.append((group_key, item))

# 转换为带多级索引的DataFrame
result_df = pd.DataFrame(
    [row[1] if row[1] != '' else row[0] for row in result_data],
    columns=['content'],
    index=pd.MultiIndex.from_tuples(result_data, names=['分组标签', '子项'])
)

3. 实现小写字母行高亮

使用Pandas的Styler工具给分组标签行(小写字母)添加高亮样式:

def highlight_group_label(row):
    # 通过多级索引判断是否为分组标签行
    if row.name[1] == '':
        return ['background-color: #fff2cc']  # 浅黄高亮,可自定义颜色
    return ['']

# 应用样式
styled_result = result_df.style.apply(highlight_group_label, axis=1)

效果说明

  • 在Jupyter Notebook中,带多级索引的result_df会自动显示折叠按钮,点击b或c即可展开/折叠对应的子项。
  • 高亮样式会给分组标签行添加背景色,清晰区分层级。
  • 如果不需要折叠功能,可简化为普通单列结构:
result_rows = []
for group_key, group_df in df.groupby('Unnamed: 1', sort=False):
    result_rows.append(pd.Series([group_key], columns=['content']))
    result_rows.append(group_df.rename(columns={'Unnamed: 0': 'content'})[['content']])
result_df = pd.concat(result_rows, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:12:47