pandas如何按自定义顺序[1,0,2]根据Labels列值排序DataFrame行
pandas实现DataFrame按指定自定义顺序排序
你可以通过两种常用方法实现Labels列按[1,0,2]的自定义顺序排列,不需要改动原有数据的取值。
方法1:转换为有序分类类型(适合需要长期复用该排序规则的场景)
pandas的分类类型支持自定义类别顺序,设置后调用常规排序方法就会自动按你定义的顺序排列:
import pandas as pd # 1. 定义你需要的自定义排序顺序 custom_sort_order = [1, 0, 2] # 2. 将Labels列转换为有序分类,绑定自定义顺序 df1['Labels'] = pd.Categorical( df1['Labels'], categories=custom_sort_order, ordered=True ) # 3. 常规调用sort_values即可,排序结果自动遵循[1,0,2]的顺序 df2 = df1.sort_values(by='Labels', ascending=True)
如果排序完成后需要把Labels列恢复为普通整数类型(方便后续数值计算),再加一行转换即可:
df2['Labels'] = df2['Labels'].astype(int)
方法2:sort_values传入key映射(适合临时排序、不修改原数据类型的场景)
pandas 1.1.0及以上版本支持给sort_values传入key参数,通过映射把标签值转换为排序权重,不需要修改原列的属性:
# 定义自定义顺序 custom_sort_order = [1, 0, 2] # 构造映射字典:每个标签对应的排序优先级(索引越小排得越靠前) order_map = {label: idx for idx, label in enumerate(custom_sort_order)} # 排序时通过key参数传入映射规则 df2 = df1.sort_values(by='Labels', key=lambda col: col.map(order_map))
效果验证
排序完成后你可以通过df2['Labels'].unique()查看取值顺序,会返回按[1,0,2]排列的结果,同一标签对应的行会连续排列,和常规升/降序排序的行聚合逻辑一致。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

