2013-11-21 3 views
80

У меня есть dataframe с уровнями 2 индекса:Turn панды многоиндексной в колонку

      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 

Как лучше это сделать?

Мне нужно это, потому что я хочу агрегировать данные as instructed here, но я не могу выбрать свои столбцы, если они используются в качестве индексов.

+2

Duplicate: http://stackoverflow.com/questions/18624039/pandas-reset-index-on-series-to-remove-multiindex Вы хотите первое предложение. '.reset_index()' – TomAugspurger

+1

большое спасибо, я на самом деле много об этом заглядывал, но «make multiindex to column» и подобные запросы всегда получал мне потоки, которые хотели бы сфокусировать их dataframes ... – TheChymera

+2

Всегда проще найти ответ, когда вы уже знаете это :) – TomAugspurger

ответ

99

reset_index() - это метод pandas DataFrame, который будет передавать значения индекса в DataFrame в виде столбцов. Значение по умолчанию для параметра: drop = False (которое будет хранить значения индекса в виде столбцов).

Все, что вам нужно сделать добавить .reset_index(inplace=True) после имени DataFrame:

df.reset_index(inplace=True) 
5

Это на самом деле не применяется к вашему делу, но это может быть полезным для других (как мне 5 минут назад) знать , Если один в MULTINDEX имеют те же имена, как это:

      value 
Trial  Trial 
    1    0  13 
        1   3 
        2   4 
    2    0  NaN 
        1  12 
    3    0  34 

df.reset_index(inplace=True) и не будет работать причиной столбцов, создается не может разделить имена.

Итак, то вам нужно переименовать MULTINDEX с 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, и единственными предложениями, которые я нашел, было падение одного уровня в индексе, чего я не мог сделать.

Смежные вопросы