如何使用Pandas重新排序多索引列?

问题描述 投票:1回答:1

Table is shown here

码:

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”

谢谢!

pandas multi-index
1个回答
3
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.