Python分组排名问题:相同值获随机排名而非降序
分组内重复值的稳定排名解决方法
你用df['Rank']=df.groupby(["Id"])[' value'].rank(ascending=0)做分组排名时,遇到重复value就出现随机排名,是因为rank()默认用随机逻辑处理平局。调整method参数就能解决:
几种实用的排名规则:
- 按原顺序给重复值排先后:如果希望相同
value的行按数据原本的出现顺序获得连续排名(不随机),用method='first':df['Rank'] = df.groupby(["Id"])['value'].rank(ascending=0, method='first') - 重复值共享同一排名(无跳跃):想让相同
value的行拿到一样的排名,后续排名连续不跳过,用method='dense':df['Rank'] = df.groupby(["Id"])['value'].rank(ascending=0, method='dense') - 重复值取组内最小/最大排名:
- 相同
value都取组内最小排名:method='min' - 相同
value都取组内最大排名:method='max'
示例代码:
df['Rank'] = df.groupby(["Id"])['value'].rank(ascending=0, method='min') - 相同
注意点
ascending=0等同于降序排名,要升序的话改成ascending=True即可;- 你代码里列名写的
' value'带空格,要和DataFrame实际列名一致,不然会找不到列报错。
内容的提问来源于stack exchange,提问作者user20663141
相关产品推荐
相关产品推荐

