отключить многоиндексный фрейм данных с помощью pd.melt()

#python #pandas

#python #панды

Вопрос:

Я хотел бы отключить фрейм данных с многоиндексными столбцами, но мне трудно получить точный результат, который я хочу. Я поиграл со всеми параметрами pd.melt() функции, но не смог этого сделать…

Вот какой у меня ввод :

 import pandas as pd
indexes = [['TC1', 'TC2'], ['x', 'z', 'Temp']]
data = pd.DataFrame(columns=pd.MultiIndex.from_product(indexes))

data.loc[0,('TC1', 'x')] = 10
data.loc[0,('TC1', 'z')] = 100
data.loc[0,('TC1', 'Temp')] = 250
data.loc[0,('TC2', 'x')] = 20
data.loc[0,('TC2', 'z')] = 200
data.loc[0,('TC2', 'Temp')] = 255
  

И вот какой результат я хотел бы получить, при этом столбец «Time» является индексом данных

   Time   TC   x    z Temp
0    0  TC1  10  100  250
1    0  TC2  20  200  255
  

Мои реальные данные имеют гораздо больше столбцов вида TCx .
Есть какие-нибудь подсказки?

Ответ №1:

Попробуйте

 data_out = data.stack(level=0).rename_axis(['Time','TC']).reset_index()

Out[87]:
   Time   TC Temp   x    z
0     0  TC1  250  10  100
1     0  TC2  255  20  200
  

Ответ №2:

Как насчет:

 data.stack(0).reset_index().rename(
    columns={'level_0': 'Time', 'level_1': 'TC'})
  

Итак, в этом случае .stack() это то, что вам нужно:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.stack.html