【问题标题】:How to get ranked values of a pandas column without gaps?如何获得没有间隙的熊猫列的排名值?
【发布时间】:2014-02-12 09:46:41
【问题描述】:

这样

import pandas
df = pandas.DataFrame({'col':['bbb','aaa','aaa','ccc']})
print df
print '-------------'
df['ranked'] = df['col'].rank(method='min')
print df

我明白了:

   col
0  bbb
1  aaa
2  aaa
3  ccc
-------------
   col  ranked
0  bbb       3
1  aaa       1
2  aaa       1
3  ccc       4

我想拥有:

   col
0  bbb
1  aaa
2  aaa
3  ccc
-------------
   col  ranked
0  bbb       2
1  aaa       1
2  aaa       1
3  ccc       3

有人知道怎么弄吗?

【问题讨论】:

    标签: python sorting pandas rank


    【解决方案1】:

    试试这个:

    import pandas
    df = pandas.DataFrame({'col':['bbb','aaa','aaa','ccc']})
    print df
    print '-------------'
    
    df2 = df.drop_duplicates()
    df2['ranked'] = df2.rank(method='min')
    print df.merge(df2, on='col')
    

    输出:

       col
    0  bbb
    1  aaa
    2  aaa
    3  ccc
    -------------
       col  ranked
    0  bbb       2
    1  aaa       1
    2  aaa       1
    3  ccc       3
    

    【讨论】:

    • 不幸的是,它不适用于df = pandas.DataFrame({'col':['bbb','aaa','ccc','aaa']})。
    • @Roman,哦!,是的,您说得有道理,我已经用另一种方法更新了我的答案,希望对您有所帮助
    【解决方案2】:

    您也可以使用Series.rank(method="dense"),它类似于 min 但不会跳过数字:

    http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.rank.html

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2016-02-29
      • 2023-02-17
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 2015-09-11
      • 2021-04-17
      相关资源
      最近更新 更多