假设我有一个包含两行具有相同值的数据框:
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
但我不知道该怎么做。也许我可以按等级对它们进行分组并命令它们......?不过,我不知道该如何做到这一点。
答案 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
,那么您希望和就地获得的结果将从操作返回结果数据框。