2014-07-09 108 views
2

我有一個multiindex數據框。這些列看起來像:重命名多列索引大熊貓列

Ex。 DF:

 index date  Text  Text  Text  Text  Text 
OtherText    OtherText1 OtherText1 OtherText1 OtherText1 OtherText1 
Col      Col1  Col2  Col3  Col4  Col5 
     0 17-Jun-14 1   2   3   4   5 

代碼來創建:

arrays = [['Date', 'Text', 'Text', 'Text', 'Text', 'Text'], 
     ['', 'OtherText1', 'OtherText1', 'OtherText1', 'OtherText1', 'OtherText1'], 
     ['', 'Col1', 'Col2', 'Col3', 'Col4', 'Col5']] 
df = pd.DataFrame(randn(1,6), columns=arrays) 

列名稱:

[('date', '', ''), 
('text', 'somemoretext', 'Col1'), 
('text', 'somemoretext', 'Col2'), 
('text', 'somemoretext', 'Col3')...] 

我期待或者重命名或交換第一列的水平。這並沒有產生錯誤,但也沒有改變列。

df.rename(columns={"('date', '', '')" : "('', '' 'date')"}, inplace=True) 

如何重新排序和/或重命名多重索引中的特定列?

所需的輸出:

 index    Text  Text  Text  Text  Text 
OtherText    OtherText1 OtherText1 OtherText1 OtherText1 OtherText1 
Col   date  Col1  Col2  Col3  Col4  Col5 
     0 17-Jun-14 1   2   3   4   5 
+0

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.swaplevel.html?highlight=swap%20level#pandas.DataFrame.swaplevel – Jeff

+0

@Jeff這對於整個數據框很容易。你會如何將這個應用於單列? 'df [('date','','')]。swaplevel(0,2)'不起作用。 – DataSwede

+0

你應該展示你是如何構建框架的,以及你正在嘗試做什麼的。該用法沒有任何意義。 – Jeff

回答

2

你可以做到這一點。

In [17]: df.set_index('Date').reset_index(col_level=2) 
Out[17]: 
        Text           
      OtherText1           
     Date  Col1  Col2  Col3  Col4  Col5 
0 -1.468055 -1.528279 -1.230268 0.010953 -1.344443 0.650798 

我不知道你爲什麼用這種方式使用多索引列。 HTH。

+0

這正是我正在尋找的。 col_level = 2具體。我認爲創建IPython筆記本並將其放到網上可能會使其更加清晰。關鍵是我不能選擇如何格式化輸出 - 我只需要使其與匹配。 – DataSwede