Pandas의 다중 인덱스 정렬


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을 인덱스 측으로 교체해야합니까?

답변:


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

흠. 나보다 빠르고 더 나은 부팅 솔루션입니다.
DSM

2
정확히 내가 필요했던 것, 감사합니다. 문서에서 명확하지 않았습니다 (적어도 찾지 못했습니다). 또한 최상위 수준 만 정의 할 때 오류 메시지가 잘못 표시 Cannot sort by duplicate column X됩니다..
Dr. Jan-Philip Gehrcke 2013

목록을 사용해야하는 이유에 대한 설명을 추가해 주셔서 감사합니다. 나는 ... 팬더는 열 목록을 튜플 대 목록을 감지하고 열로 튜플 해석 선택하지 텐데
Kaushik이 Ghose

5
@KaushikGhose 는 좋은 기능 요청 이 될 수 있습니다. loc을 사용할 수 있다고 생각합니다.df.loc[('Group1', 'C')]
Andy Hayden
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.