У меня есть датафрейм с 2 уровнями индекса:
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
Как я могу лучше всего это сделать?
Мне это нужно, потому что я хочу агрегировать данные, как указано здесь , но я не могу выбрать такие столбцы, если они используются в качестве индексов.
.reset_index()
Ответы:
Reset_index () представляет собой метод панды DataFrame , который будет передавать значение индекса в DataFrame в виде столбцов. Значением по умолчанию для параметра является drop = False (значения индекса будут сохранены в виде столбцов).
Все, что вам нужно сделать, добавить
.reset_index(inplace=True)
после имени DataFrame:источник
df.reset_index(level=[...])
Это не относится к вашему делу, но может быть полезно для других (таких как я 5 минут назад), чтобы знать. Если у одного мультииндекса такое же имя, как у этого:
df.reset_index(inplace=True)
потерпит неудачу, потому что созданные столбцы не могут иметь одинаковые имена.Итак, вам нужно переименовать мультииндекс с помощью
df.index = df.index.set_names(['Trial', 'measurement'])
:И тогда
df.reset_index(inplace=True)
будет работать как шарм.Я столкнулся с этой проблемой после группировки по году и месяцу по названному столбцу datetime (не index)
live_date
, что означало, что были названы и год, и месяцlive_date
.источник
Как упомянуто в комментарии @ cs95, чтобы пропустить только один уровень, используйте:
df.reset_index(level=[...])
Это позволяет избежать переопределения желаемого индекса после сброса.
источник