首页 文章

根据列值对带有MultiIndex的pandas DataFrame进行排序

提问于
浏览
4

在控制台中打印后,我有一个MultiIndex的DataFrame看起来像这样:

value  indA  indB
           scenarioId group                        
2015-04-13    1       A           -54.0   1.0   1.0
                      B          -160.0   1.0   1.0
                      C           -15.0   0.0   1.0
              2       A           -83.0   1.0   1.0
              3       A           -80.0   2.0   2.0
              4       A          -270.0   2.0   2.0
2015-04-14    1       A           -56.0   1.0   1.0
                      B            -1.0   1.0   1.0
                      C           -60.0   0.0   1.0
              2       A           -32.0   1.0   1.0
              3       A           -91.0   2.0   2.0
              4       A           -17.0   2.0   2.0

我在初始数据集上使用了 groupbysum 函数后得到了它 .

我想保持相同的格式,但是根据 value 列进行排序 . 我已经尽力使用排序函数来做到这一点,但我认为拥有没有名称的MultiIndex的第一个索引(对于日期)这一事实是一个问题 .

基本上,输出应如下所示:

value  indA  indB
           scenarioId group                        
2015-04-13   1        B          -160.0   1.0   1.0
                      A           -54.0   1.0   1.0
                      C           -15.0   0.0   1.0
             2        A           -83.0   1.0   1.0
             3        A           -80.0   2.0   2.0
             4        A          -270.0   2.0   2.0
2015-04-14   1        C           -60.0   1.0   1.0
                      A           -56.0   1.0   1.0
                      B            -1.0   0.0   1.0
             2        A           -32.0   1.0   1.0
             3        A           -91.0   2.0   2.0
             4        A           -17.0   2.0   2.0

请有人赐教我这个吗?

提前致谢 .

1 回答

  • 2

    你可以使用sort_values sort_index

    print (df.sort_values('value').sort_index(level=[0,1], sort_remaining=False))
                                 value  indA  indB
               scenarioId group                   
    2015-04-13 1          B     -160.0   1.0   1.0
                          A      -54.0   1.0   1.0
                          C      -15.0   0.0   1.0
               2          A      -83.0   1.0   1.0
               3          A      -80.0   2.0   2.0
               4          A     -270.0   2.0   2.0
    2015-04-14 1          C      -60.0   0.0   1.0
                          A      -56.0   1.0   1.0
                          B       -1.0   1.0   1.0
               2          A      -32.0   1.0   1.0
               3          A      -91.0   2.0   2.0
               4          A      -17.0   2.0   2.0
    

    另一个解决方案 - sort_valuesreset_indexset_index

    df = df.reset_index()
           .sort_values(['level_0','scenarioId','value'])
           .set_index(['level_0','scenarioId','group'])
    print (df)
                                 value  indA  indB
    level_0    scenarioId group                   
    2015-04-13 1          B     -160.0   1.0   1.0
                          A      -54.0   1.0   1.0
                          C      -15.0   0.0   1.0
               2          A      -83.0   1.0   1.0
               3          A      -80.0   2.0   2.0
               4          A     -270.0   2.0   2.0
    2015-04-14 1          C      -60.0   0.0   1.0
                          A      -56.0   1.0   1.0
                          B       -1.0   1.0   1.0
               2          A      -32.0   1.0   1.0
               3          A      -91.0   2.0   2.0
               4          A      -17.0   2.0   2.0
    

相关问题