Предположим, что источник df был создан как:
df = pd.DataFrame(np.arange(1,25).reshape(2, -1),
columns=[ 'Metric ' + x for x in list('ABCD') ] * 3)
, поэтому он содержит:
Metric A Metric B Metric C Metric D Metric A Metric B Metric C Metric D Metric A Metric B Metric C Metric D
0 1 2 3 4 5 6 7 8 9 10 11 12
1 13 14 15 16 17 18 19 20 21 22 23 24
Чтобы преобразовать его из "широкого" в " длинный "формат, вы можете запустить, например:
df2 = pd.DataFrame(df.values.reshape(-1, 4), columns=df.columns[0:4],
index=[ 'Poem ' + x for x in list('123') ] * df.index.size)
получение:
Metric A Metric B Metric C Metric D
Poem 1 1 2 3 4
Poem 2 5 6 7 8
Poem 3 9 10 11 12
Poem 1 13 14 15 16
Poem 2 17 18 19 20
Poem 3 21 22 23 24
Другое решение
Вы также можете сделать это и другим способом:
df.T.set_index(pd.MultiIndex.from_product(
[['Poem ' + x for x in list('123')], df.columns[0:4]])).T\
.stack(level=0).reset_index(level=0, drop=True)