2016-08-10 2 views
1

Я создал mulitlevel DataFrame:Удаление имя mulilevel индекса

  Price 
Country England Germany  US 
sys dis 
23 0.8 300.0 300.0 800.0 
24 0.8 1600.0 600.0 600.0 
27 1.0 4000.0 4000.0 5500.0 
30 1.0 1000.0 3000.0 1000.0 

Сейчас я хочу, чтобы удалить имя: Страна и добавить индекс от 0 до ..

   Price 
    sys dis England Germany US 
    0 23 0.8 300.0 300.0 800.0 
    1 24 0.8 1600.0 600.0 600.0 
    2 27 1.0 4000.0 4000.0 5500.0 
    3 30 1.0 1000.0 3000.0 1000.0 

Это мой кодекс:

df = pd.DataFrame({'sys':[23,24,27,30],'dis': [0.8, 0.8, 1.0,1.0], 'Country':['US', 'England', 'US', 'Germany'], 'Price':[500, 1000, 1500, 2000]}) 


df = df.set_index(['sys','dis', 'Country']).unstack().fillna(0) 

Могу ли я получить некоторые подсказки, как его решить? У меня не слишком много опыта с многоуровневым DataFrame.

ответ

3

Попробуйте это:

df.reset_index() 
df.columns.names =[None, None] 


df.columns 
MultiIndex(levels=[[u'Price'], [u'England', u'Germany', u'US']], 
     labels=[[0, 0, 0], [0, 1, 2]], 
     names=[None, u'Country']) 
+0

Я не уверен, что правильно понял df.columns.names = [None, None]. Он используется для многоуровневой Dataframe. Нужно ли использовать дважды «Нет», потому что существует два уровня данных Dataframe? Что делать, если я хочу также удалить заголовок Price? – Monica

+0

@Monica посмотреть правки – Merlin

+0

Я понял это! Большое вам спасибо за помощь! :) – Monica

1

для индекса

df.reset_index(inplace=True) 

Для колонн

df.columns = df.columns.droplevel(1) 
+0

Когда я использую df.columns = df.columns.droplevel (1), заголовки заменяются на Цена, Цена, Цена. Я могу использовать функцию переименования, но, возможно, есть более разумный способ сделать это. – Monica

+0

удачи. иногда вам нужно написать несколько дополнительных строк, чтобы получить то, что вам нужно –

2

Лучшие У меня сейчас:

df.rename_axis([None, None], 1).reset_index() 

enter image description here

+0

nice trick buddy –

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