2017-09-11 127 views
6

當我一次創建多索引表時,sortlevel()按預期工作。但是,如果我連接多個表來創建相同的多索引表,我不能sortlevel()了。下面完整的例子:大連熊貓在連接後對MultiIndex進行排序

import pandas as pd 
a=pd.DataFrame({'country':'Zimbabwe','name':'Fred'}, index=[1]) 
b=pd.DataFrame({'country':'Albania','name':'Jeff'}, index=[0]) 
not_working = pd.concat([a,b],keys=['second','first']) 
working = pd.DataFrame({'country':['Zimbabwe','Albania'],'name':['Fred','Jeff']}, index=pd.MultiIndex.from_tuples([('second',1),('first',0)])) 

not_working_sorted = not_working.sortlevel(0) 
working_sorted = working.sortlevel(0) 

我希望這兩個生產:

  country name 
first 0 Albania Jeff 
second 1 Zimbabwe Fred 

不過,我只拿到了 「工作」。任何人都知道我做錯了什麼?使用熊貓0.19.2

+0

編輯:我想我看到一個提示。查看working和not_working的索引,我看到:working.index = MultiIndex(levels = [[u'first',u'second'],[0,1]],labels = [[1,0], [1,0]])。但not_working.index = MultiIndex(levels = [[u'second',u'first'],[0,1]],labels = [[0,1],[1,0]]) – user3076411

+0

看起來像排序索引不適用於索引標籤的字母順序,而僅適用於它們在索引中出現的順序。無論如何,我可以改變這一點? – user3076411

回答

4

試試這個嗎?

working.sort_index() 
Out[702]: 
      country name 
first 0 Albania Jeff 
second 1 Zimbabwe Fred 

或更具體

working.sort_index(level=[0, 1], ascending=[True, False]) 

編輯:你的多個索引標籤顯示如下。

not_working.index 
Out[565]: 
MultiIndex(levels=[['second', 'first'], [0, 1]], 
      labels=[[0, 1], [1, 0]]) 
working.index 
Out[566]: 
MultiIndex(levels=[['first', 'second'], [0, 1]], 
      labels=[[1, 0], [1, 0]]) 

所以,如果你想not_working工作排序:

not_working.sort_index(level=[0, 1], ascending=[False, False]) 
Out[567]: 
      country name 
first 0 Albania Jeff 
second 1 Zimbabwe Fred 
+1

哦,我現在看到了這個 – Vaishali

+0

sort_index不能解決我的問題。你在「工作」上嘗試過,但是在「not_working」上嘗試時,結果並不一樣。 – user3076411

+0

@ user3076411您可以嘗試'not_working.sort_index(level = [0,1],升序= [False,False]) – Wen

3

sortlevel()已過時所以儘量使用sort_index()

not_working.sort_index(level = 1) 

而且

working.sort_index(level = 1) 

你得到

  country  name 
first 0 Albania  Jeff 
second 1 Zimbabwe Fred 
+0

我甚至不知道這個函數'sortlevel' :),謝謝澄清:) – Wen

+1

沒有注意到'sortlevel()'已經被棄用,謝謝和++ ;-) – MaxU

+0

@MaxU,只是需要什麼在一個無聊的星期一下午:D – Vaishali