I have a Series with 3-level 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
My goal is to sort Series firstly by Country and then by Date, ignoring Group level to achieve the next result:
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
And I need Group level further, so I can't simply eliminate it.
So I tried to use sort_index method like this:
print(ser_test.sort_index(level = ['Country', 'Date']))
or like that:
print(ser_test.sort_index(level = ['Country', 'Date'], sort_remaining = False))
In both cases I received a result, where Group level is involved in sorting process and have a priority before Date level:
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
I tried to use all the options of sort_index and achieved an unexpected success with this piece of code:
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
It's quite strange and I'm not sure that this is a universal way to get a guaranteed expected sorting result while using a MultiIndex is a critical option for me.
So, can you help me to understand sort_index principles and share to me a piece of code for this particular case?