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

如何将两次groupby得到的双层索引Series转换为指定DataFrame?

解决双层索引Series转指定结构DataFrame的问题

嘿,这个需求其实很容易实现,我来给你具体的代码步骤和解释:

首先,我们先把你描述的双层索引Series构造出来(方便你直接测试):

import pandas as pd

# 构造符合你描述的Series
data = {
    ('Abastecimiento', 'Doctorado'): 3,
    ('Abastecimiento', 'Universitario'): 50,
    ('Abastecimiento', 'Terciario'): 200,
    ('Abastecimiento', 'Secundario'): 1150,
    ('Administracion', 'Doctorado'): 92,
    ('Administracion', 'Universitario'): 250,
    ('Administracion', 'Terciario'): 500,
    ('Administracion', 'Secundario'): 2150
}
s = pd.Series(data, name='max_ed')

接下来,用最简洁的方法把它转换成你想要的DataFrame:

# 把多层索引转为普通列,并重命名列名
df = s.reset_index()
df.columns = ['sector', 'education', 'max_ed']

运行完之后,你得到的DataFrame就完全符合需求了,输出示例如下:

sector     education  max_ed
0  Abastecimiento     Doctorado       3
1  Abastecimiento  Universitario      50
2  Abastecimiento    Terciario     200
3  Abastecimiento   Secundario    1150
4   Administracion     Doctorado      92
5   Administracion  Universitario     250
6   Administracion    Terciario     500
7   Administracion   Secundario    2150

原理解释

reset_index()方法会自动把Series的多层索引(MultiIndex)拆分成单独的列,默认列名是level_0、level_1,加上原来的Series名称max_ed。我们只需要把列名改成你需要的sector、education、max_ed就搞定了。

如果你想手动构造(虽然没必要,但可以理解底层逻辑),也可以用这种方式:

df = pd.DataFrame({
    'sector': [idx[0] for idx in s.index],
    'education': [idx[1] for idx in s.index],
    'max_ed': s.values
})

两种方法都能得到相同的结果,推荐第一种,更简洁高效~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:48