如何将pandas rank生成的字典中非整数四舍五入为唯一整数
方案1:从源头避免非整数排名(推荐)
你调用pandas的rank方法时,直接指定method='first'参数,遇到并列值时会按数据出现的先后顺序直接分配唯一整数排名,不会生成带.5的浮点值,不需要后续二次处理。
示例调用写法:
# 假设df['col']是你要排名的列 df['rank'] = df['col'].rank(method='first') # 转字典直接就是整数结果 rank_dict = df['rank'].to_dict()
方案2:已有浮点排名字典的处理方式
如果你已经生成了浮点排名的字典,可以通过排序后重新分配连续整数的方式实现需求,该方式可以保证排名相对顺序不变,且不会出现重复值,同值条目的排名先后可以通过调整排序规则自由控制。
示例代码
# 你的原始浮点排名字典 rank_dict = { 'EHS': 11.0, 'Engineering': 4.5, 'GPS': 9.5, 'Logistics': 3.0, 'NPI & Technical': 7.0, 'OSD': 8.0, 'Quality': 1.5, 'RSC & Micronising': 1.5, 'Strategy': 4.5, 'Tech': 6.0, 'Unknown Function': 9.5 } # 按原始排名值升序排序,同值条目默认按键名升序排序,可修改key调整同值先后顺序 sorted_items = sorted(rank_dict.items(), key=lambda x: (x[1], x[0])) # 按排序后的顺序分配唯一连续整数排名 new_rank_dict = {k: idx + 1 for idx, (k, v) in enumerate(sorted_items)}
输出结果示例
{ 'Quality': 1, 'RSC & Micronising': 2, 'Logistics': 3, 'Engineering': 4, 'Strategy': 5, 'Tech': 6, 'NPI & Technical': 7, 'OSD': 8, 'GPS': 9, 'Unknown Function': 10, 'EHS': 11 }
如果你要调整同值条目的整数分配顺序,比如让Strategy排4、Engineering排5,只需要修改排序的key即可,示例:
# 同值条目按键名倒序排序 sorted_items = sorted(rank_dict.items(), key=lambda x: (x[1], x[0]), reverse=True)
内容的提问来源于stack exchange,提问作者Abijah
相关产品推荐
相关产品推荐

