我有一个类似于以下内容的多索引(列)数据框:
my_frame = pd.DataFrame(data={'a':[1,2,3,4],'b':[5,6,7,8],'c':[9,10,11,12], 'd':[13,14,15,16],
'subcolumn_1':['A1','A1','A2','A2'],
'subcolumn_2':['B1','B2','B1','B2']})
my_frame.set_index(keys=['subcolumn_1','subcolumn_2'], inplace=True)
my_frame = my_frame.transpose()
subcolumn_1 A1 A2
subcolumn_2 B1 B2 B1 B2
a 1 2 3 4
b 5 6 7 8
c 9 10 11 12
d 13 14 15 16
我想对 subcolumn_2
进行排序,但不是按字母数字排序,而是使用自定义列表,例如下面的伪代码。
my_frame.sort_subcolumn_2(neworder=["B2","B1"])
subcolumn_1 A1 A2
subcolumn_2 B2 B1 B2 B1
a 2 1 4 3
b 6 5 8 7
c 10 9 12 11
d 14 13 16 15
编辑:我的用例要求在新索引之后进行排序已设置。当前的解决方案要求我在设置之前进行排序指标
实现此目的的一种方法是将 subcolumn_2 转换为有序分类,
from pandas.api.types import CategoricalDtype
cat_type = CategoricalDtype(categories=['B2','B1','B3'], ordered=True)
my_frame['subcolumn_2'] = my_frame['subcolumn_2'].astype(cat_type)
尝试
my_frame.sort_values(by=['subcolumn_2'])
我是一名优秀的程序员,十分优秀!