我已经知道如何排序数据帧与多列,但只有当他们都降序或升序,但我正在寻找排序数据帧在升序,然后如果有一个使用降序排序的第二列的平局。
这就是我要找的:
<表类>
#的
%机会
等级
tbody><<tr>1 50 2 2100 3 195 1 3 75 5 260 4 表类>
col1=df1.sort_values(df1.columns.tolist(),ascending=[True,False]).assign(col1=range(1,df1.pipe(len)+1)).col1
df1.assign(rank=col1)
输出:
ofhits chance rank
0 1 50 2
1 2 100 3
2 1 95 1
3 3 75 5
4 2 60 4
您可以在自定义订单中使用sort_values
,然后使用numpy.argsort
:
df['Rank'] = np.argsort(df.reset_index(drop=True) # optional
.sort_values(by=['# of hits', '% chance'],
ascending=[True, False])
.index)+1
NB。reset_index
是可选的,只有在索引还没有排序时才需要。
输出:
# of hits % chance Rank
0 1 50 2
1 2 100 3
2 1 95 1
3 3 75 5
4 2 60 4
可再生的输入:
df = pd.DataFrame({'# of hits': [1, 2, 1, 3, 2],
'% chance': [50, 100, 95, 75, 60]})
您也可以使用rank(method='first)
df['Rank'] = df.sort_values('% chance',ascending=False)['# of hits'].rank(method = 'first').astype(int)
输出:
# of hits % chance Rank
0 1 50 2
1 2 100 3
2 1 95 1
3 3 75 5
4 2 60 4