Багатоіндексне сортування в пандах


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 

Я хочу відсортувати всі дані та індекс за стовпцем C у групі 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 на індексну сторону?

Відповіді:


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

* щоб не заплутати панд у думках, що ви хочете відсортувати спочатку за групою1, потім за C.


Примітка: Спочатку використовувався, .sortоскільки застарілий, а потім вилучений через 0.20, на користь .sort_values.


Дякую, саме те, що я шукав.
MattB

Хммм. Швидше за мене і краще рішення для завантаження.
DSM

2
Саме те, що мені потрібно було, дякую. Це не було зрозуміло з документів (принаймні я не знайшов). Крім того , повідомлення про помилку , коли тільки визначення верхнього рівня вводить в оману: Cannot sort by duplicate column X.
Доктор Ян-Філіп Герке

Додаткова вдячність за додавання пояснення, чому ми повинні використовувати список. Я хотів би, щоб Пандас виявив список проти кортежу і інтерпретував кортеж як вибір стовпців, а не як список стовпців ...
Каушик Гоше

5
@KaushikGhose, що звучить, може бути хорошим запитом на функцію , я думаю, ви можете використовувати loc:df.loc[('Group1', 'C')]
Andy Hayden
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.