如何按预设类别顺序对Pandas DataFrame进行重排?
按自定义类别顺序排序DataFrame
首先,用户提供的示例DataFrame生成代码如下:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(15, 3)), columns=list('NMO')) df['Catgeory1'] = ['I','I','I','I','I','G','G','G','G','G','P','P','I','I','P'] df['Catgeory2'] = ['W','W','C','C','C','W','W','W','W','W','O','O','O','O','O']
需求
按Catgeory1列的自定义顺序排序:P类在前,接着是I类,最后是G类,同时保留所有行的完整特征。
解决方案
推荐用pd.Categorical指定自定义排序规则,高效且适合大规模DataFrame:
- 定义目标排序顺序
custom_order = ['P', 'I', 'G']
- 将
Catgeory1转为带指定顺序的分类类型,再排序
# 方式1:修改原DataFrame列类型后排序 df['Catgeory1'] = pd.Categorical(df['Catgeory1'], categories=custom_order, ordered=True) sorted_df = df.sort_values('Catgeory1') # 方式2:不修改原列,临时转换后排序 sorted_df = df.sort_values( 'Catgeory1', key=lambda x: pd.Categorical(x, categories=custom_order, ordered=True) )
两种方式都会生成符合要求的排序结果,所有行的N、M、O、Catgeory2等特征都会和原行一一对应保留。
内容的提问来源于stack exchange,提问作者Baaridi
相关产品推荐
相关产品推荐

