pandas Multiindex,仅对一级值进行排序

时间:2019-02-01 13:21:06

标签: pandas multi-index

我有点卡住排序一个熊猫多指标,其用于我的数据集之一的列:

MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], ['Number of Visitors', 'Profit']],
       labels=[[2, 2, 5, 5, 8, 8, 11, 11], [0, 1, 0, 1, 0, 1, 0, 1]],
       names=['Month', None])

我希望在每个月的访问者数量之前显示利润,所以总的来说,我对当前的级别感到满意,但希望第二级别的标签为[1,0,1,0,1 ,0,1,0],而不是[0,1,0,1,0,1,0,1]。有什么方法可以做到这一点?我已经尝试过sort_index,但是无法使其按我想要的方式工作。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

在第二级使用reindex

mux = pd.MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
                             'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 
                            ['Number of Visitors', 'Profit']],
       labels=[[2, 2, 5, 5, 8, 8, 11, 11], [0, 1, 0, 1, 0, 1, 0, 1]],
       names=['Month', None])
print (mux)

df = pd.DataFrame({'A':range(8)}, index=mux)
print (df)
                          A
Month                      
Mar   Number of Visitors  0
      Profit              1
Jun   Number of Visitors  2
      Profit              3
Sep   Number of Visitors  4
      Profit              5
Dec   Number of Visitors  6
      Profit              7

df = df.reindex(['Profit','Number of Visitors'], level=1)
print (df)
                          A
Month                      
Mar   Profit              1
      Number of Visitors  0
Jun   Profit              3
      Number of Visitors  2
Sep   Profit              5
      Number of Visitors  4
Dec   Profit              7
      Number of Visitors  6