如何按自定义顺序对带字符串索引的Pandas DataFrame排序
要给这个带字符串索引的DataFrame按自定义顺序排序,有两种实用的方法,我结合你的数据来具体演示:
方法1:使用
reindex直接指定顺序 这种方法最直接,适合只需要一次性按自定义顺序排列的场景。你只需要定义好想要的索引顺序列表,然后用reindex方法重新排列DataFrame的行:
# 定义你想要的自定义索引顺序 custom_player_order = ['Ryan Bowen', 'Adrian Caldwell', 'Cedric Hunter', 'Maurice Baker', 'Ratko Varda'] # 按自定义顺序重新排列DataFrame df_sorted = df.reindex(custom_player_order)
运行后得到的结果就是完全按照你指定的球员顺序排列的DataFrame:
Age G Tm Year id Player Ryan Bowen 34 52 OKC 2009 6141 Adrian Caldwell 31 81 DAL 1997 6169 Cedric Hunter 27 6 CHH 1991 2967 Maurice Baker 25 7 VAN 2004 5335 Ratko Varda 22 60 TOT 2001 13950
注意:如果你的自定义顺序里包含原DataFrame没有的索引值,
reindex会为这些值生成全为NaN的行。如果不想出现这种情况,可以先过滤掉不存在的索引。
方法2:利用分类索引(CategoricalIndex)实现持久化排序
如果之后你还需要多次按这个自定义顺序排序,或者想让这个顺序成为索引的默认排序规则,可以把索引转换成分类类型,并指定排序优先级:
# 定义自定义顺序 custom_player_order = ['Ryan Bowen', 'Adrian Caldwell', 'Cedric Hunter', 'Maurice Baker', 'Ratko Varda'] # 将原索引转换为分类索引,指定自定义顺序为有序类别 df.index = pd.CategoricalIndex( df.index, categories=custom_player_order, ordered=True ) # 按索引排序 df_sorted = df.sort_index()
这样处理后,后续调用df.sort_index()都会自动遵循你设定的自定义顺序,而且如果之后新增了属于这些类别的球员行,排序时也会自动放到对应的位置。
补充:如果原DataFrame中有不在自定义顺序里的索引值,它们会被放在排序结果的最后面(因为
ordered=True)。
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

