programing

판다의 다중 인덱스 정렬

css3 2023. 10. 22. 20:17

판다의 다중 인덱스 정렬

panddf에 다중 인덱스 열이 있는 데이터셋이 있는데 특정 열의 값으로 정렬하고 싶습니다.내 데이터 집합은 다음과 같습니다.

    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 

모든 데이터와 인덱스를 열별로 정렬하고 싶습니다.C인에Group 1결과가 다음과 같이 나타날 수 있도록 내림차순으로 정렬합니다.

   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인덱스 쪽으로?

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

* 팬더들을 혼란스럽게 하지 않기 위해 그룹 1로 먼저 정렬하고 C로 정렬하고 싶다고 생각합니다.


참고: 원래는 사용하지 않다가 0.20에서 삭제되었습니다.

  1. 열을 인덱싱하여 정렬할 수 있습니다(예: 세 번째 열 등).또한 대괄호가 필요 없기 때문에 열을 색인하는 튜플이 작동합니다.

    # sort in descending order by the third column
    df.sort_values(('Group1', 'C'), ascending=False)
    
    df.sort_values(df.columns[2], ascending=False)   # same as above
    

    res1

  2. 여러 열로 정렬하려면 튜플 목록을 사용하거나 단순히 열을 색인화합니다.또한 목록을 다음으로 전달할 수 있습니다.ascending해당 열에서 정렬 오름차순으로 할지 여부를 선택합니다.

    # sort by (Group1, B) in descending order and (Group1, A) in ascending order
    df.sort_values(by=[('Group1', 'B'), ('Group1', 'A')], ascending=[False, True])
    
    df.sort_values(df.columns[[1, 0]].tolist(), ascending=[False, True])
    

    res2

  3. 다중 인덱스 데이터 프레임을 정렬할 코드를 찾으려면sort_index. 예를 들어, 두 번째 수준을 내림차순으로 정렬하고 첫 번째 수준을 오름차순으로 정렬하려면:

    # select levels by name
    df.sort_index(level=['Name', 'Groups'], ascending=[True, False])
    
    # select levels by index (this works even if indices are unnamed)
    df.sort_index(level=[1, 0], ascending=[True, False])
    

    res3

언급URL : https://stackoverflow.com/questions/14733871/multi-index-sorting-in-pandas