Python学习笔记:按特定字符排序sort_values
一、背景
利用 pd.sort_values
可以实现对数据框的排序。
DataFrame.sort_values(by, # 排序字段
axis=0, #行列
ascending=True, # 升序、降序
inplace=False, # 是否修改原始数据框
kind='quicksort', # 排序方式
na_position='last', # 缺失值处理方式
ignore_index=False, # 忽略索引
key=None) # 函数
二、特殊需求
使用 sort_values
方法排序时都是根据内置的字母或者数值大小直接排序。
如果需要针对自定义的排序方式进行排序。
例如:衣服的码数(S/M/L)、按地市(广州、深圳...)等。
可通过以下两种方式实现:
map
映射关系CategoricalDtype
类型实现
1.测试数据
import pandas as pd
import numpy as np
df = pd.DataFrame({
"Name":["aaa","bbb","aba","abc","cac","ccc"],
"Length":[100,120,130,111,100,128],
"High":[140,80,120,90,125,116],
"Size":["S","M","L","XS","XL","L"]
})
df
2.传统排序
df.sort_values('Name')
df.sort_values('Length')
df.sort_values('High', ascending=False) # 降序
df.sort_values(['Length', 'High'])
df.sort_values(['Length', 'High'], ascending=[True, False]) # 多字段排序
3.自定义排序
- 映射方式
# 输出并非预期
df.sort_values('Size')
'''
Name Length High Size
2 aba 130 120 L
5 ccc 128 116 L
1 bbb 120 80 M
0 aaa 100 140 S
4 cac 100 125 XL
3 abc 111 90 XS
'''
# 构造map字典
order = ['XS','S','M','L','XL']
order_map = dict(zip(order, range(len(order))))
# {'L': 3, 'M': 2, 'S': 1, 'XL': 4, 'XS': 0}
df['Order'] = df['Size'].map(order_map)
df
'''
Name Length High Size Order
0 aaa 100 140 S 1
1 bbb 120 80 M 2
2 aba 130 120 L 3
3 abc 111 90 XS 0
4 cac 100 125 XL 4
5 ccc 128 116 L 3
'''
# 输出满足要求
df.sort_values('Order')
'''
Name Length High Size Order
3 abc 111 90 XS 0
0 aaa 100 140 S 1
1 bbb 120 80 M 2
2 aba 130 120 L 3
5 ccc 128 116 L 3
4 cac 100 125 XL 4
'''
- 使用
CategoricalDtype
类型
CategoricalDtype
具有类别和顺序的分类数据的类型,能够创建自定义的排序数据类型。
# 指定一个分类的数据类型
category_size = pd.CategoricalDtype(
['XS','S','M','L','XL'],
ordered=True
)
category_size
# CategoricalDtype(categories=['XS', 'S', 'M', 'L', 'XL'], ordered=True)
# 分类取值
category_size.categories
# Index(['XS', 'S', 'M', 'L', 'XL'], dtype='object')
# 字段设置为 CategoricalDtype 类型
df['Size'] = df['Size'].astype(category_size)
df.dtypes
'''
Name object
Length int64
High int64
Size category
dtype: object
'''
# 排序
df.sort_values('Size')
'''
Name Length High Size
3 abc 111 90 XS
0 aaa 100 140 S
1 bbb 120 80 M
2 aba 130 120 L
5 ccc 128 116 L
4 cac 100 125 XL
'''
参考链接:精华!Pandas数据排序实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2019-01-02 Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏