一、介绍
自然排序顺序(Natural sort order
)不同于默认排序,针对字符串逐个比较对应位置字符的 ASCII
码方式,更关注字符串实际相对大小意义的排序。
例如:需要根据年增长率(50%)对数据列进行排序,此时无法直接排序。
可以借助第三方库(natsort
)进行排序。
二、natsort库
1.安装
pip install natsort
'''
Collecting natsort
Downloading natsort-8.1.0-py3-none-
Installing collected packages: natsor
Successfully installed natsort-8.1.0
'''
2.排序
import pandas as pd
import numpy as np
import natsort
# 构建测试集
df = pd.DataFrame({
"Name": ['A', 'B', 'C'],
"Rate": ['5%', '15%', '10%']
})
# 默认排序
df.sort_values(by='Rate')
'''
Name Rate
2 C 10%
1 B 15%
0 A 5%
'''
# 并非我们所要~
# 自然排序
natsort.index_natsorted(df['Rate']) # 自然顺序排序
np.argsort(natsort.index_natsorted(df['Rate']))
# 最终结果
df.sort_values('Rate', key=lambda x: np.argsort(natsort.index_natsorted(x)))
'''
Name Rate
0 A 5%
2 C 10%
1 B 15%
'''
参考链接:pandas中鲜为人知的隐藏排序技巧
参考链接:natsort