If you name index levels, you can use a list of names, for example:
index = pd.MultiIndex.from_product(
[['a', 'b'], ['A', 'B'], ['One', 'Two']],
names=['idx1', 'idx2', 'idx3']
)
df = pd.DataFrame(np.arange(16).reshape(2, 8), columns=index)
df.stack(index.names)
result:
idx1 idx2 idx3
0 a A One 0
Two 1
B One 2
Two 3
b A One 4
Two 5
B One 6
Two 7
1 a A One 8
Two 9
B One 10
Two 11
b A One 12
Two 13
B One 14
Two 15
dtype: int64
source
share