问题描述
df.head()
Win Lose Draw
A1 3.0 5.0 6.0
A2 3.0 4.0 3.0
A3 0.0 6.0 8.0
A4 0.0 10.0 4.0
A5 8.0 2.0 4.0
我要根据以下条件对数据帧df.rank(method='dense').astype(int)
进行排名:
-
胜利->胜利越多,排名越高`
-
输掉->如果等级相等,则输掉次数少/平局次数多的行在等级
中会更高Output :
df_rank`Rank A1 3 # Has wins equal to A2,but has more losses,so ranked after A2 A2 2 A3 4 A4 5 # Has most number of losses. So ranked last A5 1 #Has most number of wins
解决方法
想法分别对每一列进行排名,用ascending=False
代表Win
,创建Series
个元组,然后再次创建rank
:
a = df.Win.rank(method='dense',ascending=False)
b = df.Lose.rank(method='dense')
df['Rank'] = pd.Series(zip(a,b),index=df.index).rank(method='dense').astype(int)
print (df)
Win Lose Draw Rank
A1 3.0 5.0 6.0 3
A2 3.0 4.0 3.0 2
A3 0.0 6.0 8.0 4
A4 0.0 10.0 4.0 5
A5 8.0 2.0 4.0 1