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

如何在Pandas中单独存储DataFrame多层分组结果并用于HTML表格展示

如何在Pandas中单独存储DataFrame多层分组结果并用于HTML表格展示

嘿,我完全懂你想要的效果——把多层分组后的每个子结果单独拎出来,再做成结构化的层级式HTML表格展示对吧?我来一步步教你怎么实现:

首先,先把你的示例数据在Pandas里还原出来,确保我们的数据源完全匹配:

import pandas as pd

# 构造你的示例DataFrame
data = {
    'university': [
        'Evergreen College', 'Evergreen College', 'Evergreen College',
        'Cascade University', 'Cascade University',
        'Horizon Institute', 'Horizon Institute'
    ],
    'country': ['USA', 'USA', 'Swiss', 'CANADA', 'CANADA', 'FRANCE', 'FRANCE'],
    'sector': ['URO', 'URO', 'URO', 'DIG', 'VIP', 'MP', 'MP'],
    'name': ['Isabel', 'Rami', 'Johnson', 'Anthony', 'Michael', 'Ben', 'Benjamin'],
    'firstname': ['Emily', 'David', 'Parker', 'Jessica', 'Thierry', 'Samuel', 'John'],
    'code': ['694123', '63123', '114196', '55177', '124199', '25896', '52366']
}

df = pd.DataFrame(data)

接下来,我们用groupby做三层嵌套分组:university(大学)→ country(国家)→ sector(部门),然后把每个分组的结果单独存到字典里,这样你之后想调用任何一个分组都能直接拿到对应的子DataFrame,完全满足你“单独获取每个分组”的需求:

# 按指定列进行多层分组
grouped = df.groupby(['university', 'country', 'sector'])

# 创建字典存储所有分组结果:键是(大学, 国家, 部门)的元组,值是对应子DataFrame
group_results = {}
for group_keys, group_df in grouped:
    # 重置索引,避免原DataFrame的索引干扰
    group_results[group_keys] = group_df.reset_index(drop=True)

现在你可以随时调用任何一个分组了!比如想拿Evergreen College下USA地区的URO部门数据,直接写group_results[('Evergreen College', 'USA', 'URO')]就能得到对应的子表格,非常方便。

接下来就是生成你想要的层级化HTML展示了。我们可以把分组结果按大学→国家→部门的层级重新整理,然后拼接成带标题缩进的HTML内容,完美匹配你想要的展示效果:

# 生成层级化的HTML内容
html_output = '<div style="padding: 20px; font-family: Arial, sans-serif;">'

# 先按大学层级重新整理分组,方便按顺序展示
university_level_groups = {}
for (uni, country, sector), sub_df in group_results.items():
    if uni not in university_level_groups:
        university_level_groups[uni] = {}
    if country not in university_level_groups[uni]:
        university_level_groups[uni][country] = {}
    university_level_groups[uni][country][sector] = sub_df

# 遍历每所大学,拼接HTML
for uni_name, country_dict in university_level_groups.items():
    html_output += f'<h3 style="color: #2c3e50; margin-top: 15px;">{uni_name}</h3>'
    # 遍历大学下的每个国家
    for country_name, sector_dict in country_dict.items():
        html_output += f'<h4 style="margin-left: 20px; color: #34495e;">{country_name}</h4>'
        # 遍历国家下的每个部门
        for sector_name, sub_df in sector_dict.items():
            html_output += f'<h5 style="margin-left: 40px; color: #7f8c8d;">{sector_name}</h5>'
            # 将子DataFrame转为HTML表格,添加样式
            table_html = sub_df.to_html(
                index=False,
                border=0,
                justify='left'
            )
            # 给表格添加缩进和间距样式
            html_output += f'<div style="margin-left: 60px; margin-bottom: 25px;">{table_html}</div>'

# 关闭最外层容器
html_output += '</div>'

# 可选:把HTML内容保存到本地文件查看效果
with open('grouped_university_tables.html', 'w', encoding='utf-8') as f:
    f.write(html_output)

运行这段代码后,打开生成的grouped_university_tables.html文件,就能看到和你需求完全一致的效果:每所大学作为一级标题,下面缩进显示对应的国家,再缩进显示部门,每个部门下面就是对应的学生数据表格。

如果想让表格更美观,还可以给HTML加一点CSS样式。比如在最外层div前加上这段样式:

<style>
    .group-table {
        border-collapse: collapse;
        width: 80%;
        box-shadow: 0 2px 3px rgba(0,0,0,0.1);
    }
    .group-table th, .group-table td {
        border: 1px solid #ddd;
        padding: 10px;
        text-align: left;
    }
    .group-table th {
        background-color: #f8f9fa;
        font-weight: bold;
    }
</style>

然后在to_html方法里加上classes='group-table'参数,表格就会自动应用这个样式啦!

备注:内容来源于stack exchange,提问作者innov-aphp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:39:37