码:
dff = pd.DataFrame({'Country':['France']*4+['China']*4,
'Progress':['Develop','Middle','Operate','Start']*2,
'NumTrans':np.random.randint(100,900,8),
'TransValue':np.random.randint(10000,9999999,8)})
dff = dff.set_index(['Country','Progress']).T
数据和代码如上所示。
我想知道有没有办法重新命令“Progress”作为使用Python的start-develop-middle-operate。
我尝试使用map函数并使用数字设置每个阶段,但无法从多索引中提取“Progress”
谢谢!
reindex
您可以指定要重新编制索引的级别
cats = ['Start', 'Develop', 'Middle', 'Operate']
dff.reindex(cats, axis=1, level=1)
Country France China
Progress Start Develop Middle Operate Start Develop Middle Operate
NumTrans 772 832 494 793 750 722 818 684
TransValue 7363187 2578816 9764430 4863178 159777 840700 978816 9674337
set_levels
with CategoricalIndex
您可以定义第二级的顺序,然后排序。
lvl1 = dff.columns.levels[1]
cats = ['Start', 'Develop', 'Middle', 'Operate']
cati = pd.CategoricalIndex(
lvl1,
categories=cats,
ordered=True
)
dff.columns.set_levels(
cati, level=1, inplace=True
)
dff.sort_index(1)
Country China France
Progress Start Develop Middle Operate Start Develop Middle Operate
NumTrans 750 722 818 684 772 832 494 793
TransValue 159777 840700 978816 9674337 7363187 2578816 9764430 4863178