How to Reindex MultiIndex Dataframe on Multiple Levels?(如何在多个层次上对多索引数据帧进行重新索引?)
本文介绍了如何在多个层次上对多索引数据帧进行重新索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我当前有以下聚合的数据帧,并且我有一个多索引,如下所示:
Date Country_Band Value Decimal
May 2021 Non-US 2-14 0.11
US 2-14 0.22
1 0.33
15+ 0.44
Non-US 1 0.55
15+ 0.66
我想以某种方式对它们进行组织和分组,以获得以下内容:
Date Country_Band Value Decimal
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
这是较大数据帧的索引。我首先尝试执行以下代码:
df_march_agg = df_march_agg.reindex(['US', 'Non-US'], level='Country_Band')
它在获取国家/地区波段组时起作用,但是,该值仍然不是按数字顺序排列的:
Date Country_Band Value Decimal
May 2021 US 2-14 0.22
1 0.33
15+ 0.44
Non-US 2-14 0.11
1 0.55
15+ 0.66
我随后尝试了同样的操作:
df_march_agg = df_march_agg.reindex(['1', '2-14', '15+'], level='Value')
但这随后取消了先前的重新索引。你知道我遗漏了什么或需要添加什么才能让两者都井然有序吗?
干杯!
推荐答案
MultiIndex.set_levels
中包含有序类别的一个概念,因此可以使用DataFrame.sort_index
:
df.index = (df.index.set_levels(pd.CategoricalIndex(df.index.levels[1],
ordered=True,
categories=['US', 'Non-US']),
level=1)
.set_levels(pd.CategoricalIndex(df.index.levels[2],
ordered=True,
categories=['1', '2-14', '15+']),
level=2))
df = df.sort_index()
print (df)
Decimal
Date Country_Band Value
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
DataFrame.reindex
与MultiIndex.from_product
的另一个想法:
mux = pd.MultiIndex.from_product([['May 2021'],
['US', 'Non-US'],
['1', '2-14', '15+']],
names=['Date','Country_Band','Value'])
df = df.reindex(mux)
print (df)
Decimal
Date Country_Band Value
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
这篇关于如何在多个层次上对多索引数据帧进行重新索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在多个层次上对多索引数据帧进行重新索引
基础教程推荐
猜你喜欢
- 如何防止Groupby超越指数? 2022-09-22
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 从顶点坐标创建三角网格 2022-09-21
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 如何将RPC与Volttron配合使用 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21