Когда создается мультииндекс с использованием from_tuples, объект создания индекса имеет другой порядок, чем входной кортеж
Я пытаюсь добавить уровень столбца к фрейму данных, используя метод pd.MultiIndex.from_tuples, но уровни отличаются от того, что я ожидал.
df = pd.DataFrame({'x_1':[1, 2], 'x_2':[3, 4], 'x_10':[3, 4], 'y_1':[5, 6], 'y_2':[7, 8], 'y_10':[1, 2]})
df = df.reindex(columns=['x_1', 'x_2', 'x_10', 'y_1', 'y_2', 'y_10'])
index = pd.MultiIndex.from_tuples([tuple(c.split('_')) for c in df.columns])
print(index)
MultiIndex(levels=[['x', 'y'], ['1', '10', '2']],
labels=[[0, 0, 0, 1, 1, 1], [0, 2, 1, 0, 2, 1]])
Когда я добавляю уровень в фрейм данных и выполняю наложение, порядок не тот, который я хочу.
df.columns = index
df.stack()
x y
0 1 1 5
10 3 1
2 3 7
1 1 2 6
10 4 2
2 4 8
Я ожидаю, что уровни индекса будут выглядеть так:
MultiIndex(levels=[['x', 'y'], ['1', '2', '10']])
и укладка будет выглядеть следующим образом:
df.stack()
x y
0 1 1 5
2 3 7
10 3 1
1 1 2 6
2 4 8
10 4 2