Python 按单个整数对列进行排序

Python 按单个整数对列进行排序,python,pandas,numpy,series,rank,Python,Pandas,Numpy,Series,Rank,嗨,我基本上是在尝试将数据帧中的一列排序到排序位置 它看起来像这样,我正在尝试创建这样的东西。对于卖出相同数量水果的人来说,排名是一样的,这样当我按排名对他们进行排序时,就没有小数了。有人能给我建议吗 person | number of fruits sold | ranking A | 5 | 2 B | 6 | 1 C | 2 |

嗨,我基本上是在尝试将数据帧中的一列排序到排序位置

它看起来像这样,我正在尝试创建这样的东西。对于卖出相同数量水果的人来说,排名是一样的,这样当我按排名对他们进行排序时,就没有小数了。有人能给我建议吗

person | number of fruits sold | ranking
 A     |          5            |    2
 B     |          6            |    1
 C     |          2            |    4
 D     |          5            |    2
 E     |          3            |    3
你可以用。这里有一些技巧:注意否定你的序列,指定
sort=True
,为你想要的结果添加1

df['ranking'] = pd.factorize(-df['number of fruits sold'], sort=True)[0] + 1
结果:

    person  number of fruits sold  ranking
0   A                           5        2
1   B                           6        1
2   C                           2        4
3   D                           5        2
4   E                           3        3
使用:


可能是@RahulAgarwal的复制品,我认为这不是一个好的dup目标。这里没有涉及到
GroupBy
。相关:你能评论一下为什么需要
int
转换吗?医生说排名是1比n。所以我相信
rank
应该只输出整数。具体来说,
组之间的秩总是增加1
@jpp-Hmmm,不知道为什么输出是浮点的。嗨,我得到了答案,但我能得到关于pd.factorize如何工作的解释吗?@cwerff,我能找到的最好解释是:
将对象编码为枚举类型或分类变量。当重要的是识别不同的值时,此方法对于获取数组的数字表示非常有用。
df['ranking'] = df['number of fruits sold'].rank(method='dense', ascending=False).astype(int)
print (df)
  person  number of fruits sold  ranking
0      A                      5        2
1      B                      6        1
2      C                      2        4
3      D                      5        2
4      E                      3        3