对熊猫多索引中每个级别1的值进行排序

时间:2019-07-03 13:47:22

标签: python pandas sorting dataframe

我有一个具有多索引的数据框,第一级是company_ID,第二级是时间戳。每月如何根据所有公司的排名来对其排名?

                        Score
company_idx timestamp            
10006       2010-01-31  69.875394
            2010-11-30  73.640693
            2010-12-31  73.286248
            2011-01-31  73.660052
            2011-02-28  74.615564
            2011-03-31  73.535187
            2011-04-30  72.491390
            2012-01-31  72.162768
            2012-02-29  61.637952
            2012-03-31  59.445419
            2012-04-30  25.685615
            2012-05-31   8.047693
            2012-06-30  58.341200
                          ...
9981        2016-12-31  51.011261
            2018-05-31  54.462832
            2018-06-30  57.126250
            2018-07-31  54.695835
            2018-08-31  63.758145
            2018-09-30  63.255583
            2018-10-31  62.069697
            2018-11-30  62.795650
            2018-12-31  63.045329
            2019-01-31  60.276990
            2019-02-28  56.666379
            2019-03-31  57.903213
            2019-04-30  57.558973
            2019-05-31  52.260287

我试图做:

df2 = df.sort_index(by='Score', ascending=False)

但是它并没有让我得到我想要的东西。 你能帮忙吗?我对多层数据框很陌生。 非常感谢!

1 个答案:

答案 0 :(得分:2)

您应该将索引级别交换为第一个月,然后按时间戳升序和分数降序进行排序:

df.index = df.index.swaplevel()
df.sort_values(['timestamp', 'Score'], ascending=[True, False], inplace=True)

由于您的样本值无法得出有趣的结果,因为只有一家公司的得分值一个月。

要提取一个月的值,可以使用df.xs(month_value, level=0)将其降低到多索引中的一级,或者使用df.xs(month_value, level=0, drop_level=False)将其保留下来。