如何在Python Pandas中按排名顺序转换点列值

时间:2019-01-05 15:18:26

标签: python pandas

我有一个这样的Pandas数据框:

id1      id2        Points
1         1a          0.34
1         1a          0.34
1         2a          0.23
1         3a          0.71   
2         73a         0.52
2         43a         0.2
2         43a         0.2
2         34a         0.83
3         23a         0.53
3         9a3         0.13

好的,这就是问题。如果id1id2在多行中相同,则points在那些行中也是相同。

我想将这些点转换为排名。对于不同的id1不同。如果两个人的id1id2相同,那么排名也会相同

预期输出:

id1      id2        Points     Rank
1         1a          0.34      2
1         1a          0.34      2
1         2a          0.23      3
1         3a          0.71      1
2         73a         0.52      2
2         43a         0.2       3
2         43a         0.2       3
2         34a         0.83      1
3         23a         0.53      1
3         9a3         0.13      2

如果我不清楚,请告诉我

1 个答案:

答案 0 :(得分:2)

GroupBy.rank与参数denseascending=False一起使用:

df['new'] = df.groupby('id1')['Points'].rank('dense', ascending=False).astype(int)
print (df)
   id1  id2  Points  new
0    1   1a    0.34    2
1    1   1a    0.34    2
2    1   2a    0.23    3
3    1   3a    0.71    1
4    2  73a    0.52    2
5    2  43a    0.20    3
6    2  43a    0.20    3
7    2  34a    0.83    1
8    3  23a    0.53    1
9    3  9a3    0.13    2