熊猫中的多索引排序


88

我在pandas df中有一个包含多索引列的数据集,我想按特定列中的值进行排序。我尝试使用sortindex和sortlevel,但无法获得所需的结果。我的数据集看起来像:

    Group1    Group2
    A B C     A B C
1   1 0 3     2 5 7
2   5 6 9     1 0 0
3   7 0 2     0 3 5 

我想按降序按组1中的C列对所有数据和索引进行排序,因此我的结果如下所示:

    Group1    Group2
    A B C     A B C
 2  5 6 9     1 0 0
 1  1 0 3     2 5 7
 3  7 0 2     0 3 5 

是否可以对数据所在的结构进行这种排序,还是应该将Group1交换到索引端?

Answers:


129

当按MultiIndex排序时,您需要在列表中包含描述该列的元组*:

In [11]: df.sort_values([('Group1', 'C')], ascending=False)
Out[11]: 
  Group1       Group2      
       A  B  C      A  B  C
2      5  6  9      1  0  0
1      1  0  3      2  5  7
3      7  0  2      0  3  5

*避免混淆大熊猫,让您认为您想先按Group1然后按C进行排序。


注意:最初使用,.sort因为已弃用,然后在0.20中删除,改为.sort_values


谢谢,正是我想要的。
MattB

m 比我快,是更好的启动解决方案。
DSM

2
正是我需要的,谢谢。从文档中还不清楚(至少我没有找到它)。另外,仅定义顶层时的错误消息是令人误解的:Cannot sort by duplicate column X
Jan-Philip Gehrcke博士2013年

特别感谢您添加为什么必须使用列表的说明。我希望熊猫能够检测列表vs元组并将元组解释为列选择而不是列列表...
Kaushik Ghose 2013年

5
@KaushikGhose听起来像是一个不错的功能请求,我想您可以使用loc:df.loc[('Group1', 'C')]
Andy Hayden
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.