美文网首页
pandas 中rank函数

pandas 中rank函数

作者: callme周小伦 | 来源:发表于2020-02-11 11:19 被阅读0次

    在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
    
    

    相关文章

      网友评论

          本文标题:pandas 中rank函数

          本文链接:https://www.haomeiwen.com/subject/hrgtfhtx.html