Есть ли способ переупорядочить определенные уровни в индексе столбцов в кадре данных Pandas на основе моих личных предпочтений (например, упорядоченным списком)?
In [130]: frame = pd.DataFrame({
...: ('TWO','thing1'):[1,2,3,4],
...: ('TWO','thing4'):[1,2,3,4],
...: ('DARK','thing1'):[0.1,0.2,1,2],
...: ('ANTS','thing3'):['a','e','i','o'],
...: ('ANTS','thing1'):['a','e','i','o']})
In [131]: frame
Out[131]:
ANTS DARK TWO
thing1 thing3 thing1 thing1 thing4
0 a a 0.1 1 1
1 e e 0.2 2 2
2 i i 1.0 3 3
3 o o 2.0 4 4
Мой список основывается на отдельном сгенерированном списке. Важно отметить, что я не знаю ни level 0
, ни level 1
индексных меток - они являются переменными.
In [132]: sort_list = ['DARK', 'ANTS', 'TWO']
Если я тогда попытаюсь передать этот список в контексте frame = frame[sort_list]
или .reindex(columns=sort_list)
, он выдаст Expected tuple, got str
по очевидным причинам. Здесь - это решения, работающие с одноуровневым индексом.
То, что я хотел бы сделать, это только отсортировать на верхнем уровне и оставить второй уровень как есть. Конечный кадр данных выглядит следующим образом ...
DARK ANTS TWO
thing1 thing1 thing3 thing1 thing4
0.1 a a 1 1
0.2 e e 2 2
1.0 i i 3 3
2.0 o o 4 4