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

基于条件指定升降序,对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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:05:26