如何按指定期限顺序对Pandas DataFrame进行排序?
Pandas按自定义期限顺序排序DataFrame
要实现按你指定的真实期限顺序排序,核心是利用Pandas的**有序分类(Categorical)**类型来强制自定义排序规则,具体步骤如下:
- 定义目标排序顺序列表
直接把需要的顺序写成列表,这就是排序的依据:
custom_tenor_order = [ '1W', '2W', '3W', '1M', '2M', '3M', '6M', '9M', '1Y', '2Y', '3Y', '4Y', '5Y', '7Y', '10Y', '12Y', '15Y', '20Y', '25Y', '30Y' ]
- 将DataFrame第一列转换为有序分类类型
把第一列的数据类型改成Categorical,并指定我们定义的顺序为分类的有效顺序:
import pandas as pd # 假设你的DataFrame名为df,先获取第一列的列名 tenor_column = df.columns[0] # 转换为有序分类 df[tenor_column] = pd.Categorical( df[tenor_column], categories=custom_tenor_order, ordered=True )
- 执行排序
直接用sort_values方法按该列排序即可:
df_sorted = df.sort_values(tenor_column)
关键说明
- 这种方法避免了默认字符串排序的缺陷(比如字典序会让
10Y排在1M前面),完全贴合业务上的期限逻辑。 - 如果DataFrame中存在不在
custom_tenor_order里的期限值,转换后会变成NaN,排序时默认会被放到结果的最后,你可以根据需求用dropna()删除这类行,或者补充到分类列表中。
内容的提问来源于stack exchange,提问作者Guillem
相关产品推荐
相关产品推荐

