You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何df.sort_values()无法正确对投资收益率数据排序?

问题原因

你的TEST列是字符串类型(带%符号),而非数值类型。字符串排序是按字符的ASCII码顺序比较的:

  • 数字开头的正数字符串,首字符ASCII码大于"-",所以全部排在负数前面
  • 负数内部按字符串规则排序,比如"-1%"会比"-3%"靠前,最终就出现了「正数先升序、负数再升序」的错误排序结果。
解决方法

先把百分比字符串转成数值再排序,两种方式可选:

方式1:修改原列类型后排序

# 移除%符号,转成浮点数,除以100得到真实收益率(不除以100也不影响排序逻辑)
df['TEST'] = df['TEST'].str.replace('%', '').astype(float) / 100
# 执行排序
df_sorted = df.sort_values('TEST')

方式2:排序时临时转换(不修改原数据)

如果不想改动原DataFrame的列结构,用sort_values的key参数做临时转换:

df_sorted = df.sort_values('TEST', key=lambda x: x.str.replace('%', '').astype(float))

效果验证

转换后再排序,就能得到你期望的正确顺序:-3%、-1%、-0.5%、1%、2%、5%。

内容的提问来源于stack exchange,提问作者JoeBloggs90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:15:32