讲师中心 微信公众号
AI工具推荐 视频效率加速

掌握Pandas DataFrame多列自定义排序顺序

夜宇姑娘_7445

夜宇姑娘_7445

发布时间:2025-09-22 17:26:27

|

269人浏览过

|

来源于php中文网

原创

掌握Pandas DataFrame多列自定义排序顺序

本文详细介绍了如何使用Pandas库的sort_values()方法对DataFrame进行多列排序,并实现每列独立的升序或降序控制。通过by参数指定排序的列顺序,结合ascending参数传入布尔值列表,精确控制每列的排序方向,从而满足复杂的自定义排序需求。文章包含示例代码和注意事项,助您高效处理数据排序任务。

引言

在数据分析和处理中,对dataframe进行排序是一项基本且常见的操作。pandas库提供了强大的sort_values()方法,不仅支持单列排序,还能实现多列复合排序。然而,当我们需要对不同的排序键(列)应用不同的排序方向(例如,第一列升序,第二列降序,第三列再升序)时,就需要对sort_values()方法的参数进行精细化配置。本文将深入探讨如何利用sort_values()的by和ascending参数,实现dataframe的多列自定义排序。

Pandas DataFrame多列自定义排序

pandas.DataFrame.sort_values()方法是实现DataFrame排序的核心工具。它允许用户指定一个或多个列作为排序键,并为每个键定义排序方向。

方法签名概述:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

对于多列自定义排序,我们主要关注by和ascending这两个参数。

  • by参数: 接收一个字符串(单列名)或一个字符串列表(多列名)。列表中的列名顺序决定了排序的优先级:列表中的第一个列是主排序键,第二个是次排序键,依此类推。
  • ascending参数: 接收一个布尔值(应用于所有by指定的列)或一个布尔值列表。当by参数是一个列名列表时,ascending参数也应是一个布尔值列表,其长度必须与by列表的长度相同。列表中每个布尔值对应by列表中相应位置的列,True表示升序,False表示降序。

示例:实现复杂排序逻辑

假设我们有一个包含列 'A', 'B', 'C' 的DataFrame,需要按照以下规则进行排序:

  1. 首先按列 'A' 升序排列。
  2. 然后按列 'B' 降序排列。
  3. 最后按列 'C' 升序排列。

下面是实现这一需求的具体步骤和代码示例。

1. 创建示例DataFrame

首先,我们创建一个示例DataFrame,以便演示排序操作。

Manage Apple Notes
Manage Apple Notes

使用 inotes CLI 从终端管理 Apple Notes。当需要在 macOS 的 Notes.app 中列出、读取、创建、编辑、删除或搜索备忘录时使用。

下载
import pandas as pd
import numpy as np

# 创建一个示例DataFrame
data = {
    'A': ['apple', 'banana', 'apple', 'banana', 'cherry', 'apple', 'cherry'],
    'B': [10, 20, 10, 10, 30, 20, 30],
    'C': [1, 3, 2, 1, 2, 1, 3],
    'D': [100, 200, 150, 120, 300, 110, 250]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)

原始DataFrame:

      A   B  C    D
0  apple  10  1  100
1  banana  20  3  200
2  apple  10  2  150
3  banana  10  1  120
4  cherry  30  2  300
5  apple  20  1  110
6  cherry  30  3  250

2. 执行多列自定义排序

根据上述需求('A' 升序,'B' 降序,'C' 升序),我们将by参数设置为 ['A', 'B', 'C'],并将ascending参数设置为 [True, False, True]。

# 定义排序的列及其方向
sort_columns = ['A', 'B', 'C']
sort_directions = [True, False, True] # A升序,B降序,C升序

# 执行排序
sorted_df = df.sort_values(by=sort_columns, ascending=sort_directions)

print("\n排序后的DataFrame:")
print(sorted_df)

排序后的DataFrame:

      A   B  C    D
5  apple  20  1  110
0  apple  10  1  100
2  apple  10  2  150
1  banana  20  3  200
3  banana  10  1  120
4  cherry  30  2  300
6  cherry  30  3  250

结果解析:

  • 首先,DataFrame按列 'A' 进行了升序排列('apple' -> 'banana' -> 'cherry')。
  • 在 'A' 值相同的情况下(例如,所有 'apple' 的行),再按列 'B' 进行降序排列(20 -> 10)。
  • 在 'A' 和 'B' 值都相同的情况下(例如,'apple' 和 10 的行),最后按列 'C' 进行升序排列(1 -> 2)。

注意事项与最佳实践

  1. ascending列表与by列表的长度匹配: 务必确保ascending列表中的布尔值数量与by列表中的列名数量一致,否则Pandas会抛出ValueError。
  2. inplace参数: sort_values()默认返回一个新的排序后的DataFrame,而不修改原始DataFrame。如果希望直接修改原始DataFrame,可以将inplace参数设置为True。
    # df.sort_values(by=sort_columns, ascending=sort_directions, inplace=True)

    但通常建议保留原始DataFrame,通过创建新DataFrame来存储排序结果,以避免潜在的副作用。

  3. 处理缺失值(na_position): na_position参数控制缺失值(NaN)在排序结果中的位置。
    • 'last' (默认):缺失值排在最后。
    • 'first':缺失值排在最前面。
  4. 性能考虑: 对于非常大的DataFrame,排序操作可能会消耗较多的计算资源。在进行大规模数据排序时,可以考虑优化数据类型或分块处理。
  5. 稳定性: Pandas的sort_values方法在默认情况下是稳定的,即在排序键值相同的情况下,保持原始行的相对顺序。

总结

pandas.DataFrame.sort_values()方法通过灵活使用by和ascending参数,为用户提供了强大的多列自定义排序能力。通过将列名列表传递给by,并将对应的布尔值列表传递给ascending,您可以精确地控制每一列的排序方向,从而满足各种复杂的数据排序需求。熟练掌握这一技巧,将极大地提升您在数据处理和分析中的效率。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

320

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

551

2026.04.13

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2951

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

534

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

502

2026.02.12

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1738

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2684

2023.09.04

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

60

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn