Я хочу "сплющить" существующий Dataframe и наткнулся на команду Pandas melt()
.Это, кажется, оружие выбора здесь, но поведение немного неожиданно (по крайней мере для меня).Давайте начнем с довольно невинного MultiIndex DataFrame:
df = pd.DataFrame(np.random.randn(6, 6),
index=pd.MultiIndex.from_arrays([['X','X','X','Y','Y','Y'],
['x','y','z','x','y','z']],
names=['omega1', 'omega2']),
columns=pd.MultiIndex.from_arrays([['A','A','A','B','B','B'],
['a','b','c','a','b','c']],
names=['alpha1', 'alpha2']))
Дает хороший DataFrame вроде:
alpha1 A ... B
alpha2 a b ... b c
omega1 omega2 ...
X x 2.362954 0.015595 ... 1.273841 -0.632132
y -0.134122 1.791614 ... 1.101646 -0.181099
z 0.410267 1.063625 ... -1.483590 0.521431
Y x 0.001779 -0.076198 ... -1.395494 1.177853
y 0.453172 1.899883 ... 1.116654 -2.209697
z 1.636227 -0.999949 ... 0.800413 -0.431485
Когда я сейчас делаю df.melt()
, я получаю что-то вроде этого:
alpha1 alpha2 value
0 A a 2.362954
1 A a -0.134122
2 A a 0.410267
3 A a 0.001779
...
33 B c 1.177853
34 B c -2.209697
35 B c -0.431485
Однако я больше ожидаю чего-то подобного:
omega1 omega2 alpha1 alpha2 value
0 X x A a 2.362954
1 X y A a -0.134122
2 X z A a 0.410267
3 Y x A a 0.001779
...
33 Y x B c 1.177853
34 Y y B c -2.209697
35 Y z B c -0.431485
Точный порядок не имеет значения, но было бы неплохо, если бы имена столбцов и строк оставались неизменными.Я не могу заставить Панд правильно вернуть индекс вместе с ним.Что я делаю не так ??