2013-12-09 183 views
180

這似乎相當明顯,但我似乎無法弄清楚如何將數據幀的索引轉換爲列?如何將數據框中的熊貓索引轉換爲列?

例如:

df= 
      gi ptt_loc 
0 384444683  593 
1 384444684  594 
2 384444686  596 

要,

df= 
    index1  gi ptt_loc 
0 0  384444683  593 
1 1  384444684  594 
2 2  384444686  596 

回答

317

或者:

df['index1'] = df.index 

,或者.reset_index

df.reset_index(level=0, inplace=True) 

所以,如果你有3級指標,如多指標框架:

>>> df 
         val 
tick  tag obs   
2016-02-26 C 2 0.0139 
2016-02-27 A 2 0.5577 
2016-02-28 C 6 0.0303 

,並要在索引中的第一個(tick)和第三(obs)水平轉換成列,你會怎麼做:

>>> df.reset_index(level=['tick', 'obs']) 
      tick obs  val 
tag       
C 2016-02-26 2 0.0139 
A 2016-02-27 2 0.5577 
C 2016-02-28 6 0.0303 
+4

記住,你必須對你所有的索引做n次(例如,如果你有兩個索引,那麼你必須做兩次) – dval

+7

用'df.reset_index(level = df.index.names,inplace = True)'可以將給定的整個多索引到列 – venti

+1

你可以在列上有一個索引只是添加到數據框,所以它是一個真正的列和索引? – bretcj7

22

對於多指標,你可以使用提取其分類指數

df['si_name'] = R.index.get_level_values('si_name') 

其中si_name是子索引的名稱。

3

爲了更清楚一點,我們來看一下在其索引中有兩個級別的DataFrame(一個MultiIndex)。

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'], 
            ['North', 'South']], 
            names=['State', 'Direction']) 

df = pd.DataFrame(index=index, 
        data=np.random.randint(0, 10, (6,4)), 
        columns=list('abcd')) 

enter image description here

reset_index方法,調用默認參數,將所有指數水平列,並使用一個簡單的RangeIndex的新指標。

df.reset_index() 

enter image description here

使用level參數來控制哪些索引電平被轉換成列。如有可能,請使用更清晰的級別名稱。如果沒有關卡名稱,則可以通過其整數位置來引用每個關卡,這些位置從外部開始爲0。您可以在這裏使用標量值或者您想要重置的所有索引的列表。

df.reset_index(level='State') # same as df.reset_index(level=0) 

enter image description here

在極少數情況下,你要保留指數,並打開索引的列,您可以執行以下操作:

# for a single level 
df.assign(State=df.index.get_level_values('State')) 

# for all levels 
df.assign(**df.index.to_frame()) 
相關問題