Поверните Pandas Multi-Index в столбец
У меня есть фреймворк с двумя уровнями индекса:
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
Что я хочу сделать для этого:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Как я могу это сделать?
Мне нужно это, потому что я хочу агрегировать данные в соответствии с инструкциями здесь, но я не могу выбрать такие столбцы, если они используются в качестве индексов.
Ответы
Ответ 1
Функция reset_index() - это метод pandas DataFrame, который будет передавать значения индекса в DataFrame в виде столбцов. Параметр по умолчанию для параметра: drop = False (который будет хранить значения индекса в виде столбцов).
Все, что вам нужно сделать, добавить .reset_index(inplace=True)
после имени DataFrame:
df.reset_index(inplace=True)
Ответ 2
Это на самом деле не относится к вашему делу, но может быть полезно знать другим (таким как я 5 минут назад). Если один мультииндекс имеет такие же имена, как это:
value
Trial Trial
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
df.reset_index(inplace=True)
приведет к тому, что создаваемые столбцы не могут иметь общих имен.
Тогда вам нужно переименовать мультииндекс с помощью df.index = df.index.set_names(['Trial', 'measurement'])
чтобы получить:
value
Trial measurement
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
И тогда df.reset_index(inplace=True)
будет работать как шарм.
Я столкнулся с этой проблемой после группировки по году и месяцу по столбцу datetime (не по индексу) с именем live_date
, что означало, что и год, и месяц назывались live_date
.
Ответ 3
Как упоминалось в комментарии @cs95, чтобы пропустить только один уровень, используйте:
df.reset_index(level=[...])
Это позволяет избежать переопределения желаемого индекса после сброса.