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

如何将DataFrame中字符串型列值移至升序排序后的底部?

解决DataFrame排序时将字符串值移至底部的问题

我来帮你搞定这个排序问题~你遇到的核心原因是:Python中字符串与数值比较时,字符串会被判定为更小的值,所以'unavailable'会排在所有数值前面。下面给你两种实用的解决方案:

方法一:拆分数据后合并(直观易理解)

把数值行和含'unavailable'的行分开处理,先排序数值行,再把字符串行追加到底部:

import pandas as pd

# 先执行你的替换操作(如果需要的话)
final_df = final_df.replace(0.00, 'unavailable')

# 筛选出所有Prix列不是'unavailable'的行
numeric_rows = final_df[final_df['Prix'] != 'unavailable']
# 对数值行按Prix升序排序
sorted_numeric = numeric_rows.sort_values('Prix', ascending=True)

# 筛选出含'unavailable'的行
unavailable_rows = final_df[final_df['Prix'] == 'unavailable']

# 合并两个结果,数值行在前,字符串行在后,重置索引
final_df = pd.concat([sorted_numeric, unavailable_rows]).reset_index(drop=True)

方法二:自定义排序键(简洁高效)

利用sort_values的key参数,给'unavailable'设置一个超大的排序权重(比如无穷大),这样它自然会排在所有数值后面:

import pandas as pd

# 先完成替换操作
final_df = final_df.replace(0.00, 'unavailable')

# 自定义排序键:将'unavailable'转为无穷大,其他值转为float后排序
final_df = final_df.sort_values(
    by='Prix',
    ascending=True,
    key=lambda col: col.apply(lambda val: float('inf') if val == 'unavailable' else float(val))
).reset_index(drop=True)

小提示

如果你的Prix列数据类型比较混杂,建议先做一次数据清洗,确保能转为数值的都转为数值类型,这样后续操作会更稳定。比如可以用pd.to_numeric配合errors='coerce'来处理:

final_df['Prix'] = pd.to_numeric(final_df['Prix'], errors='coerce').fillna('unavailable')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:02:41