如何将两次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
相关产品推荐
相关产品推荐

