如何根据优先级和条件对大熊猫df进行排名?

时间:2020-11-10 10:47:42

标签: pandas sorting if-statement ranking rank

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)进行排名:

  1. 胜利->胜利越多,排名越高`

  2. 输掉->如果等级相等,则输掉次数少/平局次数多的行在等级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
    

1 个答案:

答案 0 :(得分:1)

想法分别对每一列进行排名,用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