代码之家  ›  专栏  ›  技术社区  ›  Mayank Porwal

需要在熊猫栏统一并列排名

  •  0
  • Mayank Porwal  · 技术社区  · 6 年前

    我对熊猫还比较陌生。我有一个如下的数据帧:

    In [47]: print(d1)
             date name            sector     value
    0  2014-10-31    A  Information Tech  -3.18229
    1  2014-10-31    B       Industrials  -52.1333
    2  2014-10-31    C  Consumer Discret   45.3428
    3  2014-10-31    D       Industrials   -4.4901
    4  2014-10-31    E       Industrials   6.85653
    5  2014-10-31    F  Information Tech   4.56422
    6  2014-10-31    H  Information Tech  29.31419
    7  2014-10-31    G  Information Tech   6.52422
    8  2014-10-31    I            Sports  16.52422
    9  2014-10-31    J            Sports   2.62176
    

    用例是,对于某一天的记录,我需要为 价值 1至6

    为了简单起见,我将总的_行保持为上面的10行,实际上,对于每个日期它都是一个更高的数字(在数千行范围内)。等级范围从

    Output can be something like below:

             date name            sector     value  rank
    0  2014-10-31    A  Information Tech  -3.18229  5
    1  2014-10-31    B       Industrials  -52.1333  6
    2  2014-10-31    C  Consumer Discret   45.3428  1
    3  2014-10-31    D       Industrials   -4.4901  5
    4  2014-10-31    E       Industrials   6.85653  3
    5  2014-10-31    F  Information Tech   4.56422  3
    6  2014-10-31    H  Information Tech  29.31419  1
    7  2014-10-31    G  Information Tech   6.52422  3
    8  2014-10-31    I            Sports  16.52422  2
    9  2014-10-31    J            Sports   2.62176  4 
    

    提供统一军衔的最佳方式是什么?我找了很多,找不到有用的东西。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Scott Boston    6 年前

    你可以试着用 pd.qcut :

    df['rank'] = pd.qcut(df['value'], 6, [*'654321'])
    

    或者

    df['rank'] = pd.qcut(df['value'], 6, labels = ['6','5','4','3','2','1'])
    

                 date name            sector     value rank
    0 2014-10-31         A  Information Tech  -3.18229    5
    1 2014-10-31         B       Industrials -52.13330    6
    2 2014-10-31         C  Consumer Discret  45.34280    1
    3 2014-10-31         D       Industrials  -4.49010    6
    4 2014-10-31         E       Industrials   6.85653    3
    5 2014-10-31         F  Information Tech   4.56422    4
    6 2014-10-31         H  Information Tech  29.31419    1
    7 2014-10-31         G  Information Tech   6.52422    3
    8 2014-10-31         I            Sports  16.52422    2
    9 2014-10-31         J            Sports   2.62176    5
    
        2
  •  0
  •   Mayank Porwal    6 年前

    因此,我能够为我的用例找到合适的解决方案。 cut 熊猫的功能 rank 功能。

    df['rank'] = pd.cut(df['value'], 100, labels = list(range(1,101)))