2017-06-13 79 views
1

我觀察到了一些奇怪的行爲大熊貓與多指標dataFrames.columns大熊貓多指標數據幀的列名 - 奇怪的行爲

建設一個多指標數據幀:

a=[0,.25, .5, .75] 
b=[1, 2, 3, 4] 
c=[5, 6, 7, 8] 
d=[1, 2, 3, 5] 
df=pd.DataFrame(data={('a','a'):a, ('b', 'b'):b, ('c', 'c'):c, ('d', 'd'):d}) 

產生這個數據幀

 a b c d 
     a b c d 
0 0.00 1 5 1 
1 0.25 2 6 2 
2 0.50 3 7 3 
3 0.75 4 8 5 

創建具有原始數據子集的新變量框架

df1=df.copy().loc[:,[('a', 'a'), ('b', 'b')]] 

產生像預期:

 a b 
     a b 
0 0.00 1 
1 0.25 2 
2 0.50 3 

但訪問該新數據幀的列名產生一些意想不到的輸出:

print df1.columns 

MultiIndex(levels=[[u'a', u'b', u'c', u'd'], [u'a', u'b', u'c', u'd']], 
      labels=[[0, 1], [0, 1]]) 

所以( 'B', 'b')和('C ','c')仍然包含在內。

相反

print df1.columns.tolist() 

收益預期一樣:

[('a', 'a'), ('b', 'b')] 

有誰能夠解釋我這種行爲的原因?

回答

3

我覺得你需要MultiIndex.remove_unused_levels什麼是0.20.0版本的新功能。

Docs

print (df1.columns) 
MultiIndex(levels=[['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']], 
      labels=[[0, 1], [0, 1]]) 

print (df1.columns.remove_unused_levels()) 
MultiIndex(levels=[['a', 'b'], ['a', 'b']], 
      labels=[[0, 1], [0, 1]])