pandas 中rank函数

在CTR比赛中,我们常常会使用“第几次交互”、“倒数第几次交互”等特征,这就需要使用到排序功能。
rank函数极为方便。

rank函数返回从小到大排序的下标

df = pd.DataFrame({'A':['a','b']*4, 'B':[4,6,2,8,5,2,9,1]})
df['rank'] = df.groupby('A')['B'].rank()
print(df)

   A  B  rank
0  a  4   2.0
1  b  6   3.0
2  a  2   1.0
3  b  8   4.0
4  a  5   3.0
5  b  2   2.0
6  a  9   4.0
7  b  1   1.0
  • rank函数有method参数,下表展示了该参数的选项,默认为average,该参数在含有重复值时候能显露出来

    image.png

  • method=average默认设置: 相同的值占据前两名,分不出谁是1谁是2,那么去中值即1.5,下面一名为第三名

df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank()
print(df)

   A  rank
0  1   1.5
1  1   1.5
2  2   3.5
3  2   3.5
4  3   5.5
5  3   5.5
6  4   7.5
7  4   7.5
  • method=max: 两人并列第 2 名,下一个人是第 3 名。
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='max')
print(df)

   A  rank
0  1   2.0
1  1   2.0
2  2   4.0
3  2   4.0
4  3   6.0
5  3   6.0
6  4   8.0
7  4   8.0
  • method=min: 两人并列第 1 名,下一个人是第 3 名。
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='min')
print(df)

   A  rank
0  1   1.0
1  1   1.0
2  2   3.0
3  2   3.0
4  3   5.0
5  3   5.0
6  4   7.0
7  4   7.0

  • method=dense: 两人并列第1名,下一个人是第 2 名。
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='dense')
print(df)

   A  rank
0  1   1.0
1  1   1.0
2  2   2.0
3  2   2.0
4  3   3.0
5  3   3.0
6  4   4.0
7  4   4.0
  • method=first: 相同值会按照其在序列中的相对位置定值
df = pd.DataFrame({'A':[1,4,3,2,2,3,4,1]})
df['rank'] = df.A.rank(method='first')
print(df)

   A  rank
0  1   1.0
1  4   7.0
2  3   5.0
3  2   3.0
4  2   4.0
5  3   6.0
6  4   8.0
7  1   2.0
  1. 如果需要进行倒序,使用参数ascending=False
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='max',ascending=False)
print(df)

   A  rank
0  1   8.0
1  1   8.0
2  2   6.0
3  2   6.0
4  3   4.0
5  3   4.0
6  4   2.0
7  4   2.0

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容