2013-11-21 35 views
80

我有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 

我怎樣才能最好做到這一點?

我需要這個,因爲我想彙總數據as instructed here,但是如果它們被用作索引,我不能選擇這樣的列。

+2

Duplicate:http://stackoverflow.com/questions/18624039/pandas-reset-index-on-series-to-remove-multiindex你想要的第一個建議。 '.reset_index()' – TomAugspurger

+1

非常感謝,我實際上瀏覽了很多,但「使多列索引到列」和類似的查詢總是讓我的線程想要樞軸的數據框... – TheChymera

+2

總是更容易找到答案時你已經知道了:) – TomAugspurger

回答

99

reset_index()是一個pandas DataFrame方法,它將索引值作爲列傳遞到DataFrame中。該參數的默認設置是drop = False(它將保持索引值爲列)。

所有你有數據框的名字後做補充.reset_index(inplace=True)

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)將工作就像一個魅力。

我在一個名爲live_date的日期時間列按年份和月份分組後遇到此問題。然後,年份和月份都被命名爲live_date,我發現的唯一建議是在索引中刪除一個級別,這是我無法做到的。