Кажется, ошибка, потому что сортировка по меткам, а не по уровням. Если воссоздать MultiIndex
, это работает хорошо:
print (ser_test.index.labels)
[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]]
print (ser_test.index.levels)
[['2015-01-01', '2016-01-01', '2017-01-01'], ['US', 'AR', 'QA']]
ser_test.index = pd.MultiIndex.from_tuples(ser_test.index.tolist(), names=['Date', 'Country'])
print(ser_test.sort_index(level = ['Country', 'Date']))
Date Country
2015-01-01 AR 10
2016-01-01 AR 20
2017-01-01 AR 30
2015-01-01 QA 100
2016-01-01 QA 200
2017-01-01 QA 300
2015-01-01 US 1
2016-01-01 US 2
2017-01-01 US 3
dtype: int64
Другая идея - использовать этот трюк - преобразовать Серии в один столбец DataFrame
и выбрать на последнем шаге 0
:
print(ser_test.to_frame().sort_index(level=['Country', 'Date'])[0])
Date Country
2015-01-01 AR 10
2016-01-01 AR 20
2017-01-01 AR 30
2015-01-01 QA 100
2016-01-01 QA 200
2017-01-01 QA 300
2015-01-01 US 1
2016-01-01 US 2
2017-01-01 US 3
Name: 0, dtype: int64