栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python分组百分比排名

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python分组百分比排名

我想让一列数据按照分组,用数据的大小标准化到百分比 ,最小值为0,最大值为1,发现如果直接用python自带的rank(pct=True)不会得到想要的结果

假设数据集如下(这是我搜索rank命令的时候得到的数据):

以下连接有对rank函数的详细介绍:

https://jishuin.proginn.com/p/763bfbd654b6

data = pd.DataFrame({'班级':['1班','1班','1班','1班','1班','2班','2班','2班','2班','2班'],'姓名':['韩愈','柳宗元','欧阳修','苏洵','苏轼','苏辙','曾巩','王安石','张三','小伍哥'],'成绩':[80,70,70,40,10,60,60,50,50,40]})
data['姓名'] = data['姓名'].str.rjust(3,'〇') 

如果使用rank函数,并且想要最低值为0,最高值为1,得到的结果如下

def group_rank(x,col):
    max = x.max
    count = x.count()[0]
    x['成绩排名'] = (x[col].rank(pct=True)-1/count)*count/(count-1)
    return x
check = data.groupby('班级').apply(group_rank,col='成绩')
check

 

这种rank的百分比,即使标准化到0-1之后,也不是我想要的结果,然后自己写函数:

def check(x,col):
    max = x[col].max()
    min = x[col].min()
    x['percentile'] = (x[col]-min)/(max-min)*100
    return x
data.groupby('班级').apply(check,col='成绩')

 这才是想要的按照值的比例分配后得排名,所以有时候直接用函数可能得不到想要的结果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号