基于条件指定升降序,对Pandas DataFrame多列排序
解决方案:Pandas多规则排序实现
核心思路
利用Pandas的sort_values()方法,通过多列排序参数组合实现需求:先按Similarity降序,再依次按用户指定的偏好列(最多5列)按自定义升降序排序。该方法原生支持多列排序,且可给每列单独指定排序方向。
步骤与代码示例
1. 准备测试数据(替换为你的DataFrame即可)
import pandas as pd # 构造示例DataFrame data = { 'Similarity': [0.9, 0.9, 0.8, 0.9, 0.8], 'crime': [5, 3, 2, 3, 4], 'education': [80, 90, 85, 85, 95], 'income': [50000, 60000, 55000, 58000, 62000] } df = pd.DataFrame(data)
2. 定义用户偏好与排序规则
用字典存储各偏好列的升降序要求(True为升序,False为降序),同时指定用户输入的偏好列列表:
# 用户输入的偏好列列表(最多5列) preference_cols = ['crime', 'education'] # 各列的排序规则:键为列名,值为升降序 sort_rules = { 'crime': True, # crime列升序(数值越小越好) 'education': False # education列降序(数值越大越好) }
3. 整理排序参数并执行排序
将Similarity列作为主排序项,后跟偏好列;同时生成对应的排序方向列表:
# 组合排序列:先Similarity,再按用户偏好列顺序 sort_columns = ['Similarity'] + preference_cols # 生成排序方向:Similarity降序,后续列按规则指定 sort_orders = [False] + [sort_rules[col] for col in preference_cols] # 执行排序 sorted_df = df.sort_values(by=sort_columns, ascending=sort_orders)
4. 查看结果
print(sorted_df)
输出结果:
Similarity crime education income 1 0.9 3 90 60000 3 0.9 3 85 58000 0 0.9 5 80 50000 4 0.8 4 95 62000 2 0.8 2 85 55000
排序逻辑验证:
- 优先按
Similarity降序排列(0.9的行在前) Similarity相同的行,按crime升序(3 < 5)crime也相同时,按education降序(90 > 85)
注意事项
- 确保偏好列名称与DataFrame中的列名完全一致,避免
KeyError - 若偏好列存在未在
sort_rules中定义的情况,可通过sort_rules.get(col, True)设置默认排序方向(示例中默认升序) - 用户输入的偏好列列表顺序决定了排序优先级,列表越靠前的列,优先级越高
内容的提问来源于stack exchange,提问作者InspiredPup
相关产品推荐
相关产品推荐

