Я создал этот набор данных прямо из документации pandas:
In [28]: columns = pd.MultiIndex.from_tuples([('A', 'cat'), ('B', 'dog'),
....: ('B', 'cat'), ('A', 'dog')],
....: names=['exp', 'animal'])
....:
In [29]: index = pd.MultiIndex.from_product([('one', 'two'),
('bar', 'baz', 'foo', 'qux')
....: ],
....: names=['first', 'second'])
....:
In [30]: df = pd.DataFrame(np.random.randn(8, 4), index=index, columns=columns)
Набор данных MultiIndex (для столбцов и строк) выглядит следующим образом:

Я хотел бы получить что-то вроде этого [изображение обрезано, но вы получите точку]

Возможно, естьмиллионы способов изменить это, но я хочу сделать это, используя unstack () и melt ()
Вот два способа, которыми я придумал:
1. pd.melt(df.reset_index(),id_vars=['first','second'])
2. pd.melt(df.unstack().reset_index(),id_vars=['first'])
Так вот гдеЯ застрял: Почему это работает?
df.reset_index()
дает мне этот кадр данных

сэти столбцы

'first' и 'second' не отображаются в именах столбцов.Они являются фактическими уровнями колонки опыта.Поэтому мне стало интересно, что произойдет, если я добавлю больше уровней к id_vars в расплаве
Если я изменю расплав на
pd.melt(df.reset_index(),id_vars=['first','second','A'])
, я получу следующую ошибку:
ValueError: все массивы должны быть одинаковой длины
Если я изменяю расплав на
pd.melt(df.reset_index(),id_vars=['first','second','dog'])
, я получаю следующую ошибку:
KeyError: 'dog'
Может кто-нибудь объяснить, что интуитивно происходит под капотом с помощью reset_index () и почему таяние не принимает другие уровни?Почему «первый» и «второй» отображаются в виде уровней вместо столбцов?