2012-05-15 181 views
4

只是第一次嘗試熊貓,我試圖首先通過索引對數據透視表進行排序,然後再按照系列中的值排序。熊貓:排序數據透視表

到目前爲止,我已經試過:

table = pivot_table(sheet1, values='Value', rows=['A','B'], aggfunc=np.sum) 

# Sorts by value ascending, can't change to descending 
table.copy().sort() 
table 

# The following gives me the correct ordering in values, but ignores index 
sorted_table = table.order(ascending=False) 
sorted_table 

# The following brings me back to the original ordering 
sorted_table = table.order(ascending=False) 
sorted_table2 = sorted_table.sortlevel(0) 
sorted_table2 

什麼是排序,然後索引值數據透視表的正確方法是什麼?

+1

你能舉一個你期望結果的樣子嗎?這聽起來像你想按照級別'A'進行排序,然後按值排序,是嗎? –

回答

8

這裏是一個可以做你想做的一個解決方案:

key1 = table.index.labels[0] 
key2 = table.rank(ascending=False) 

# sort by key1, then key2 
sorter = np.lexsort((key2, key1)) 

sorted_table = table.take(sorter) 

結果是這樣的:

In [22]: table 
Out[22]: 
A B  
bar one  0.698202 
    three 0.801326 
    two  -0.205257 
foo one  -0.963747 
    three 0.120621 
    two  0.189623 
Name: C 

In [23]: table.take(sorter) 
Out[23]: 
A B  
bar three 0.801326 
    one  0.698202 
    two  -0.205257 
foo two  0.189623 
    three 0.120621 
    one  -0.963747 
Name: C 

這將是很好的建成大熊貓作爲API的方法。不知道它應該看起來像什麼。