如何按自定义规则对Pandas DataFrame执行多列排序
Pandas DataFrame 多列混合排序解决方案
你可以通过自定义排序映射配合sort_values方法实现需求,两种实现方式如下:
全版本兼容写法
import pandas as pd # 定义price_band的优先级映射,数值越小排序越靠前 band_rank = { "≤95.0$": 1, "95.0$ > price ≥ 115.0$": 2, "> 115.0$": 3 } # 新增临时排序列,排序完成后删除临时列即可 car_accessories["rank"] = car_accessories["price_band"].map(band_rank) sorted_df = car_accessories.sort_values( by=["a", "b", "c", "car", "rank"], ascending=True ).drop("rank", axis=1)
高版本简洁写法(pandas ≥ 1.1.0 支持key参数)
band_rank = { "≤95.0$": 1, "95.0$ > price ≥ 115.0$": 2, "> 115.0$": 3 } sorted_df = car_accessories.sort_values( by=["a", "b", "c", "car", "price_band"], key=lambda col: col.map(band_rank) if col.name == "price_band" else col, ascending=True )
逻辑说明
- 提前为
price_band的三个固定值绑定排序权重,保证价格区间的顺序符合自定义要求 a/b/c/car四个列直接按默认字符串升序排列即可匹配字母升序需求- 所有列统一设置
ascending=True即可同时满足两类排序规则,最终输出效果和示例示意图一致。
内容的提问来源于stack exchange,提问作者Rakesh SK
相关产品推荐
相关产品推荐

