2016-09-23 103 views
1

說我有一個具有相同值的兩個行的數據幀:大熊貓:按字母順序排序,如果行有相同等級

testdf = pd.DataFrame({'a': ['alpha','beta','theta','delta','epsilon'],'b':[1,2,3,3,4]}) 

     a b 
0 alpha 1 
1  beta 2 
2 theta 3 
3 delta 3 
4 epsilon 4 

現在我想根據B列對它們進行排序:

testdf['rank'] = testdf['b'].rank(ascending=False) 

     a b rank 
0 alpha 1 5.0 
1  beta 2 4.0 
2 theta 3 2.5 
3 delta 3 2.5 
4 epsilon 4 1.0 

由於行2和3具有相同的排名,我想他們按字母順序排列爲觀衆安排:

  a b rank 
0 alpha 1 5.0 
1  beta 2 4.0 
3 delta 3 2.5 
2 theta 3 2.5 
4 epsilon 4 1.0 

但我不是確定如何做到這一點。也許我可以按等級對他們進行分組並排序......?不過,我不確定如何在原地進行。

回答

1

有可能通過使用sort_values多列排序,你想要的是rank先進行排序,然後由a列,如果你希望它就地發生,我們使用inplace=True象下面這樣:

In [14]: testdf.sort_values(['rank', 'a'], ascending=[False, True], inplace=True) 

In [15]: testdf 
Out[15]: 
     a b rank 
0 alpha 1 5.0 
1  beta 2 4.0 
3 delta 3 2.5 
2 theta 3 2.5 
4 epsilon 4 1.0 

這是你想要的結果,如果你不使用inplace=True結果數據幀將從操作中返回。

+0

謝謝!我不知道一次排除多個值的功能!我會盡快接受你的回答:) – ale19