Sắp xếp nhiều chỉ mục trong gấu trúc


88

Tôi có một tập dữ liệu với nhiều cột chỉ mục trong df gấu trúc mà tôi muốn sắp xếp theo các giá trị trong một cột cụ thể. Tôi đã thử sử dụng sortindex và sortlevel nhưng không thể nhận được kết quả mà tôi đang tìm kiếm. Tập dữ liệu của tôi trông giống như:

    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 

Tôi muốn sắp xếp tất cả dữ liệu và chỉ mục theo cột C trong Nhóm 1 theo thứ tự giảm dần để kết quả của tôi giống như sau:

    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 

Có thể thực hiện việc sắp xếp này với cấu trúc chứa dữ liệu của tôi hay tôi nên hoán đổi Group1 sang phía chỉ mục?

Câu trả lời:


129

Khi sắp xếp theo MultiIndex, bạn cần chứa bộ mô tả cột bên trong danh sách *:

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

* để không khiến gấu trúc nhầm lẫn khi nghĩ rằng bạn muốn sắp xếp đầu tiên theo Nhóm1 sau đó theo C.


Lưu ý: Ban đầu được sử dụng .sortkể từ khi không được dùng nữa, sau đó bị loại bỏ trong 0,20, ủng hộ .sort_values.


Cảm ơn, chính xác những gì tôi đang tìm kiếm.
MattB

Hừm. Nhanh hơn tôi và một giải pháp tốt hơn để khởi động.
DSM

2
Chính xác những gì tôi cần, cảm ơn. Điều đó không rõ ràng từ các tài liệu (ít nhất là tôi không tìm thấy nó). Ngoài ra, các thông báo lỗi khi chỉ định cấp cao nhất là gây hiểu lầm: Cannot sort by duplicate column X.
Tiến sĩ Jan-Philip Gehrcke,

Thêm lòng biết ơn vì đã thêm lời giải thích tại sao chúng ta phải sử dụng một danh sách. Tôi muốn Pandas sẽ phát hiện danh sách vs tuple và giải thích một tuple như một cột chọn và không phải là một danh sách các cột ...
Kaushik Ghose

5
@KaushikGhose âm thanh như có thể là một yêu cầu tính năng tốt , tôi đoán bạn có thể sử dụng loc:df.loc[('Group1', 'C')]
Andy Hayden
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.