Вы можете использовать stack
и указать уровень, который вы будете использовать sh для стека в длинном формате:
import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_product([['bar', 'zoo'], ['A', 'B', 'C']])
df = pd.DataFrame(np.random.randn(6, 6), columns=idx)
Это мой фрейм данных (похож на ваш):
bar zoo
A B C A B C
0 -0.314365 0.708094 -0.495491 -0.238145 1.654778 1.745649
1 -0.914321 -2.577186 1.221864 -0.984507 -0.861315 -0.496073
2 -1.549240 0.114752 -0.867636 0.935230 0.755379 -0.301134
Затем вы используете stack
с уровнем 0:
df.stack(level=0)
Результат:
A B C
0 bar 0.142700 -0.127700 1.914858
zoo 1.900361 -0.038232 -0.620576
1 bar 1.772417 -1.362563 0.339079
zoo 0.893481 0.000487 0.270656
2 bar -0.707328 -0.562236 0.435146
Если вы хотите, чтобы bar/zoo
был в столбце вместо мультииндекса сбросьте индекс для этого уровня:
new_df = new_df.reset_index(level=1)
Я не знаю, как выглядел оригинальный df, поэтому я работал с примером, который вы дали. Но вы, вероятно, можете сделать это за одну операцию вместо pivot
, а затем stack
в исходном DataFrame.