如何按指定列表顺序对Pandas DataFrame排序(不将COL3设为索引)
按指定列表顺序对DataFrame排序(不设COL3为索引)
现有如下pd.DataFrame:
| COL1 | COL2 | COL3 |
|---|---|---|
| x | something | AL |
| y | in | CA |
| z | place | FL |
另有一个列表['FL', 'CA', 'AL'](顺序为FL开头、AL结尾)。请问能否按照该列表的顺序对上述DataFrame进行排序?要求不将COL3设为索引,仅使DataFrame的行顺序与列表一致。
可以实现,以下是两种简洁的实现方法:
方法1:通过分类类型指定排序规则
将COL3列转为分类类型并自定义排序顺序,之后直接按该列排序即可,无需修改索引:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'COL1': ['x', 'y', 'z'], 'COL2': ['something', 'in', 'place'], 'COL3': ['AL', 'CA', 'FL'] }) # 目标排序顺序 target_order = ['FL', 'CA', 'AL'] # 将COL3转为带自定义顺序的分类列 df['COL3'] = pd.Categorical(df['COL3'], categories=target_order, ordered=True) # 按COL3排序得到结果 sorted_df = df.sort_values('COL3') print(sorted_df)
输出结果:
COL1 COL2 COL3 2 z place FL 1 y in CA 0 x something AL
方法2:通过索引映射重新排列
先建立COL3值与行索引的映射,再按目标顺序提取对应索引重新排列DataFrame:
import pandas as pd df = pd.DataFrame({ 'COL1': ['x', 'y', 'z'], 'COL2': ['something', 'in', 'place'], 'COL3': ['AL', 'CA', 'FL'] }) target_order = ['FL', 'CA', 'AL'] # 构建COL3值到行索引的映射字典 value_to_idx = {v: idx for idx, v in df['COL3'].items()} # 按目标顺序生成对应的索引列表 target_idx = [value_to_idx[v] for v in target_order] # 重新排列DataFrame sorted_df = df.loc[target_idx] print(sorted_df)
输出结果与方法1完全一致。
内容的提问来源于stack exchange,提问作者FalloutATS21
相关产品推荐
相关产品推荐

