РЕДАКТИРОВАТЬ: (спасибо @Jon Clements)
В Python 3.6 объявление sort_dict
порядок ключей будет таким, как указано, однако, до 3.6, литералы dict не обязательно сохраняют порядок.например.в 3.5 объявление sort_dict заканчивается {'Month': 'Ascending', 'Time': 'Ascending', 'Year': 'Descending'}
... что будет другим порядком итерации - таким образом, будут разные результаты сортировки.
Если всегда нужен один и тот же порядок, используйте конструктор OrderedDict
или Series
- там порядок не зависит от версии python.
Одним из возможных решений является создание помощника Series
, тогдапреобразовать индекс в список и передать также параметр ascending
заполненный логический список:
s = pd.Series(sort_dict)
print (s)
Month Ascending
Year Descending
Time Ascending
dtype: object
df = df.sort_values(by=s.index.tolist(), ascending = (s == 'Ascending'))
print (df)
Time Month Year
Index
9 23:05 April 2013
10 21:10 April 2008
6 07:50 August 2019
0 13:00 January 2018
8 22:30 July 2016
5 06:25 June 2012
1 14:30 March 2015
7 09:20 May 2015
2 12:00 November 2003
4 13:30 October 2012
3 10:15 September 2012