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
                        这篇关于如何在多个层次上对多索引数据帧进行重新索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:如何在多个层次上对多索引数据帧进行重新索引?
				
        
 
            
        基础教程推荐
             猜你喜欢
        
	     - 求两个直方图的卷积 2022-01-01
 - Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
 - 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
 - 修改列表中的数据帧不起作用 2022-01-01
 - 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 - 包装空间模型 2022-01-01
 - PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
 - 在Python中从Azure BLOB存储中读取文件 2022-01-01
 - PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
 - 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				