2014-01-29 158 views
13

pandas具有多層次的列名的支持:熊貓:多級列名

>>> x = pd.DataFrame({'instance':['first','first','first'],'foo':['a','b','c'],'bar':rand(3)}) 
>>> x = x.set_index(['instance','foo']).transpose() 
>>> x.columns 
MultiIndex 
[(u'first', u'a'), (u'first', u'b'), (u'first', u'c')] 
>>> x 
instance  first      
foo    a   b   c 
bar  0.102885 0.937838 0.907467 

這個功能是非常有用的,因爲它允許在同一數據幀的多個版本,以與第一級附加「水平」列名(在我的示例instance)區分實例。

想象我已經有一個這樣的數據幀:

    a   b   c 
bar  0.102885 0.937838 0.907467 

有一個很好的方式來增加另一個層次的列名,類似這樣的行索引:

x['instance'] = 'first' 
x.set_level('instance',append=True) 
+2

我不*認爲*有,但肯定應該有。我認爲在github上有這個功能請求... –

+1

雖然它引發了一些有趣的問題,例如「如何在列級命名有兩級時選擇特定列?」。 – LondonRob

+2

x ['first'],x [(first','a')or x.xs('a',axis = 1,level = 1)? :s –

回答

19

試試這個:

df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]}) 

columns=[('c','a'),('c','b')] 

df.columns=pd.MultiIndex.from_tuples(columns) 
+0

有人可能會喜歡這個答案Romain [here](https:// stackoverflow.com .com/a/40225796/8508004)做類似的事情,但沒有元組,因爲所有相同的級別被添加。 – Wayne