DataFrame.groupby.rank计算结果异常?求问题原因分析
问题原因及解决方法
核心问题:薪资列的数据类型错误
你遇到的问题大概率是**salary列不是数值类型(比如是字符串/object类型)**,导致rank方法按字符串字典序排序,而非数值大小排序。
举个实际场景:假设Henry的薪资是"100000"(字符串),Sam的薪资是"20000"(字符串)——从数值上看Henry薪资更高,但字符串比较是逐字符比首字母:"2"的ASCII码大于"1",所以"20000"会被判定为比"100000"大,降序排序后Sam排第1,Henry排第2,完全符合你描述的错误现象。
排查与解决步骤
先检查薪资列的数据类型
执行代码查看列类型:print(employee['salary'].dtype)如果输出是
object,坐实了是字符串类型的问题。将薪资列转换为数值类型
用pd.to_numeric把列转成数值,同时处理可能的非数值脏数据:import pandas as pd employee['salary'] = pd.to_numeric(employee['salary'], errors='coerce')errors='coerce'会把无法转换的非数值内容变成NaN,后续可以根据需求处理这些空值。
重新计算排名
转换后再执行你的rank代码:employee['rank'] = employee.groupby("departmentId")["salary"].rank(method="dense", ascending=False)此时会按数值大小降序排名,Henry作为部门最高薪会被标记为
rank=1。
内容的提问来源于stack exchange,提问作者Joker
相关产品推荐
相关产品推荐

