轻松掌握Pandas高级技巧:数据排序指南
最编程
2024-01-15 13:02:57
...
对应书本第二部分第5章Pandas高级操作第3节
数据排序是指按一定的顺序将数据重新排列,帮助使用者发现数据的变化趋势,同时提供一定的业务线索,还具有对数据纠错、分类等作用
索引排序
df.sort_index()实现按索引排序,默认以从小到大的升序方式排列。如希望按降序排序,传入ascending=False:
# 索引降序
df.sort_index(ascending=False)
# 在列索引方向上排序
df.sort_index(axis=1, ascending=False)
# 这里的s我理解为Series,需要赋值
s.sort_index() # 升序排列
df.sort_index() # df也是按索引进行排序
df.team.sort_index()
s.sort_index(ascending=False) # 降序排列
s.sort_index(inplace=True) # 排序后生效,改变原数据
# 索引重新0-(n-1)排,很有用,可以得到它的排序号
s.sort_index(ignore_index=True)
s.sort_index(na_position='first') # 空值在前,另'last'表示空值在后
s.sort_index(level=1) # 如果多层,排一级
s.sort_index(level=1, sort_remaining=False) # 这层不排
# 行索引排序,表头排序
df.sort_index(axis=1) # 会把列按列名顺序排列
df.reindex()指定自己定义顺序的索引,实现行和列的顺序重新定义:
df = pd.DataFrame({
'A': [1,2,4],
'B': [3,5,6]
}, index=['a', 'b', 'c'])
df
# 按要求重新指定索引顺序
df.reindex(['c', 'b', 'a'])
# 指定列顺序
df.reindex(['B', 'A'], axis=1)
数值排序
数据值的排序主要使用sort_values(),数字按大小顺序,字符按字母顺序。Series和DataFrame都支持此方法:
df.Q1.sort_values()
DataFrame需要传入一个或多个排序的列名:
df.sort_values('Q4')
默认排序是升序,但可以指定排序方式,下例先按team升序排列,如遇到相同的team再按name降序排列。
df.sort_values(by=['team', 'name'], ascending=[True, False])
# 这里的s我理解为Series,需要赋值
s.sort_values(ascending=False) # 降序
s.sort_values(inplace=True) # 修改生效
s.sort_values(na_position='first') # 空值在前
# df按指定字段排列
df.sort_values(by=['team'])
df.sort_values('Q1')
# 按多个字段,先排team,在同team内再看Q1
df.sort_values(by=['team', 'Q1'])
# 全降序
df.sort_values(by=['team', 'Q1'], ascending=False)
# 对应指定team升Q1降
df.sort_values(by=['team', 'Q1'], ascending=[True, False])
# 索引重新0-(n-1)排
df.sort_values('team', ignore_index=True)
混合排序
有时候需要用索引和数据值混合排序。下例中假如name是索引,我们需要先按team排名,再按索引排名:
df.set_index('name', inplace=True) # 设置name为索引
df.index.names = ['s_name'] # 给索引起名
df.sort_values(by=['s_name', 'team']) # 排序
以下方法也可以实现上述需求,不过要注意顺序:
df = pd.read_excel('team.xlsx')
# 设置索引,按team排序,再按索引排序
df.set_index('name').sort_values('team').sort_index()
另外,还可以使用df.reindex(),通过给定新的索引方式来排名,按照这个思路可以实现人工指定任意顺序。
# 按姓名排序后取出排名后的索引列表
df.name.sort_values().index
# 将新的索引应用到数据中
df.reindex(df.name.sort_values().index)
# 上面与直接使用name排序是一个结果
df.sort_values('name')
# 但是如果需要自己修改指定的顺序,则将指定顺序索引Series传给reindex()
按值大小排序
nsmallest()和nlargest()用来实现数字列的排序,并可指定返回的个
数:
# 先按Q1最小在前,如果相同,Q2小的在前
df.nsmallest(5, ['Q1', 'Q2'])
# 取出切片
s = df['Q1']
s.nsmallest(3) # 最小的3个
s.nlargest(3) # 最大的3个
# 指定列
df.nlargest(3, 'Q1')
df.nlargest(5, ['Q1', 'Q2'])
df.nsmallest(5, ['Q1', 'Q2'])
end~
上一篇: 搞定pandas排序和替换操作的终极指南
下一篇: 快速掌握Pandas排序操作(09篇)
推荐阅读
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
Python新手必看:轻松掌握Pandas数据排序技巧
-
简单易学!让你轻松掌握Pandas数据排序的多种方式
-
掌握pandas的高级技巧和不太常见的操作方法来提升数据记录效率
-
Python Pandas: 快速入门指南 - 掌握数据排序和去重技巧
-
轻松掌握Pandas高级技巧:数据排序指南
-
Python新手必看:轻松掌握Pandas数据排序技巧
-
全面掌握Pandas:从基础操作到数据排序的详细指南