Подмножество сортировки уровней в неприятностях серии MultiIndex - PullRequest
1 голос
/ 18 октября 2019

У меня есть серия с 3-уровневым MultiIndex:

print(ser_test):
                            Value
Date       Group Country         
2014-01-31 3     AE       example
                 AR       example
2014-02-28 3     AE       example
                 AR       example
2014-03-31 3     AE       example
                 AR       example
2014-04-30 3     AE       example
                 AR       example
2014-05-30 3     AR       example
2014-06-30 2     AE       example
           3     AR       example
2014-07-31 2     AE       example
           3     AR       example
2014-08-29 2     AE       example
           3     AR       example
2014-09-30 2     AE       example
           3     AR       example
2014-10-31 2     AE       example
           3     AR       example
2014-11-28 2     AE       example
           3     AR       example
2014-12-31 2     AE       example
           3     AR       example

Моя цель - сначала отсортировать серии по Страна , а затем по Дата , игнорируя *Уровень 1008 * Группировка для достижения следующего результата:

                            Value
Date       Group Country         
2014-01-31 3     AE       example
2014-02-28 3     AE       example
2014-03-31 3     AE       example
2014-04-30 3     AE       example
2014-06-30 2     AE       example
2014-07-31 2     AE       example
2014-08-29 2     AE       example
2014-09-30 2     AE       example
2014-10-31 2     AE       example
2014-11-28 2     AE       example
2014-12-31 2     AE       example
2014-01-31 3     AR       example
2014-02-28 3     AR       example
2014-03-31 3     AR       example
2014-04-30 3     AR       example
2014-05-30 3     AR       example
2014-06-30 3     AR       example
2014-07-31 3     AR       example
2014-08-29 3     AR       example
2014-09-30 3     AR       example
2014-10-31 3     AR       example
2014-11-28 3     AR       example
2014-12-31 3     AR       example

И мне нужно еще Группировать уровень, поэтому я не могу его просто устранить.

Поэтому я попытался использовать метод sort_index следующим образом:

print(ser_test.sort_index(level = ['Country', 'Date']))

или так:

print(ser_test.sort_index(level = ['Country', 'Date'], sort_remaining = False))

В обоих случаях я получил результат, где Group level isучаствует в процессе сортировки и имеет приоритет до Дата уровень:

                            Value
Date       Group Country         
2014-06-30 2     AE       example
2014-07-31 2     AE       example
2014-08-29 2     AE       example
2014-09-30 2     AE       example
2014-10-31 2     AE       example
2014-11-28 2     AE       example
2014-12-31 2     AE       example
2014-01-31 3     AE       example
2014-02-28 3     AE       example
2014-03-31 3     AE       example
2014-04-30 3     AE       example
2014-01-31 3     AR       example
2014-02-28 3     AR       example
2014-03-31 3     AR       example
2014-04-30 3     AR       example
2014-05-30 3     AR       example
2014-06-30 3     AR       example
2014-07-31 3     AR       example
2014-08-29 3     AR       example
2014-09-30 3     AR       example
2014-10-31 3     AR       example
2014-11-28 3     AR       example
2014-12-31 3     AR       example

Я попытался использовать все параметры sort_index и добился неожиданного успеха с этим фрагментом кода:

print(ser_test.sort_index(level = ['Country', 'Date'], ascending = [True, True]))

                            Value
Date       Group Country         
2014-01-31 3     AE       example
2014-02-28 3     AE       example
2014-03-31 3     AE       example
2014-04-30 3     AE       example
2014-06-30 2     AE       example
2014-07-31 2     AE       example
2014-08-29 2     AE       example
2014-09-30 2     AE       example
2014-10-31 2     AE       example
2014-11-28 2     AE       example
2014-12-31 2     AE       example
2014-01-31 3     AR       example
2014-02-28 3     AR       example
2014-03-31 3     AR       example
2014-04-30 3     AR       example
2014-05-30 3     AR       example
2014-06-30 3     AR       example
2014-07-31 3     AR       example
2014-08-29 3     AR       example
2014-09-30 3     AR       example
2014-10-31 3     AR       example
2014-11-28 3     AR       example
2014-12-31 3     AR       example

Это довольно странно, и я не уверен, что это универсальный способ получения гарантированного ожидаемого результата сортировки, в то время как с использованием MultiIndex является критически важным вариантом для меня.

Итак, вы можете помочь мне понять принципы sort_index и поделиться со мной фрагментом кода для этой части? Улар дело?

1 Ответ

1 голос
/ 18 октября 2019

Вы можете попробовать обновить до последней версии панд, протестированную в пандах 0.25.0 и работающую хорошо:

print(df.sort_index(level = ['Country', 'Date']))
                            Value
Date       Group Country         
2014-01-31 3     AE       example
2014-02-28 3     AE       example
2014-03-31 3     AE       example
2014-04-30 3     AE       example
2014-06-30 2     AE       example
2014-07-31 2     AE       example
2014-08-29 2     AE       example
2014-09-30 2     AE       example
2014-10-31 2     AE       example
2014-11-28 2     AE       example
2014-12-31 2     AE       example
2014-01-31 3     AR       example
2014-02-28 3     AR       example
2014-03-31 3     AR       example
2014-04-30 3     AR       example
2014-05-30 3     AR       example
2014-06-30 3     AR       example
2014-07-31 3     AR       example
2014-08-29 3     AR       example
2014-09-30 3     AR       example
2014-10-31 3     AR       example
2014-11-28 3     AR       example
2014-12-31 3     AR       example
...