2014-07-23 33 views
1

比方說,我有一個分級指數數據幀:在熊貓更改列名以層次列

>>> df = pd.DataFrame(np.ones((2, 4))) 
>>> df 
    0 1 2 3 
0 1 1 1 1 
1 1 1 1 1 

[2 rows x 4 columns] 
>>> df.columns = pd.MultiIndex.from_product([['a', 'b'], ['i', 'ii']]) 
>>> df 
    a  b  
    i ii i ii 
0 1 1 1 1 
1 1 1 1 1 

[2 rows x 4 columns] 

有一種簡單的方法來改變下的「B」列名?我認爲以下是直觀的,但它不起作用。

>>> df['b'].columns = ['iii', 'iv'] 
>>> df 
    a  b  
    i ii i ii 
0 1 1 1 1 
1 1 1 1 1 

[2 rows x 4 columns] 

回答

0

重命名columar多索引是一個有點尷尬的ATM(並重命名它自我它不處理多索引在一個很好的方式)。如果它的框架索引,它很容易reset_index/rename/set_index

所以2種選擇:(這在0.15.0中也會變得更容易);現在必須設定所有的級別,即使是你沒有改變的級別。

In [39]: df.columns = df.columns.set_levels([['iii','iv'],df.columns.levels[1]]) 

In [40]: df 
Out[40]: 
    iii  iv  
    i ii i ii 
0 1 1 1 1 
1 1 1 1 1 

或簡單地重新創建並設置一個新的索引(對於所有列)。

+0

我一直希望保持第一個水平相同,但後來改變第二個,所以它讀取'我ii iii iv'。 – jtorca

+0

嗯,沒有看到你想要的東西。最好只創建你想要的索引並直接賦值(例如''pd.MultiIndex.from_tuples''是另一個創建函數) – Jeff