2016-07-16 2 views
2

вот мой DataFrame:конвертировать конкретные строки панд dataframe в мультииндекс

  0  1  2 
0 0  0.0 20.0  NaN 
    1  1.0 21.0  NaN 
    2  2.0 22.0  NaN 
    ID  NaN NaN 11111.0 
    Year NaN NaN 2011.0 
1 0  3.0 23.0  NaN 
    1  4.0 24.0  NaN 
    2  5.0 25.0  NaN 
    3  6.0 26.0  NaN 
    ID  NaN NaN 11111.0 
    Year NaN NaN 2012.0 

я хочу, чтобы преобразовать «ID» и строки «года» на индекс dataframe с «ID» будучи уровнем = 0 и «Года 'уровень = 1. Я попытался использовать stack(), но все равно не могу понять.

Отредактировано: мой желаемый результат должен выглядеть следующим образом:

     0  1 
    11111 2011 0  0.0 20.0 
       1  1.0 21.0 
       2  2.0 22.0 
     2012 0  3.0 23.0 
       1  4.0 24.0 
       2  5.0 25.0 
       3  6.0 26.0 
+0

Row? для каких строк? Можете ли вы показать свой желаемый результат? – ako

+0

Какова логика данных? 'ID' и' Year' повторяются так часто? Всегда ли он соответствует строкам, которые он идентифицирует? – ako

+0

@ako: необходимость такого рода обработки возникла из-за другой операции, выполняемой на кадре данных. в этом случае столбцы (0 & 1) имели значения списка, такие как [20,21,22], которые были уложены в стек, но при этом возникла проблема, упомянутая в вопросе. –

ответ

0

Это должно работать: индексы

df1 = df.loc[pd.IndexSlice[:, ['ID', 'Year']], '2'] 
dfs = df1.unstack() 
dfi = df1.index 
dfn = df.drop(dfi).drop('2', axis=1).unstack() 

dfn.set_index([dfs.ID, dfs.Year]).stack() 

enter image description here

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