Python 设置数据帧中多索引列的顺序
是否有一种方法可以根据我的个人偏好(例如,通过有序列表)对Pandas数据框中的columns索引中的特定级别进行重新排序 然后,我的列表基于单独生成的列表。重要的是要注意,我不知道Python 设置数据帧中多索引列的顺序,python,pandas,dataframe,Python,Pandas,Dataframe,是否有一种方法可以根据我的个人偏好(例如,通过有序列表)对Pandas数据框中的columns索引中的特定级别进行重新排序 然后,我的列表基于单独生成的列表。重要的是要注意,我不知道0级或1级索引标签-它们是变量 In [132]: sort_list = ['DARK', 'ANTS', 'TWO'] 如果我随后尝试在frame=frame[sort\u list]或的上下文中传递此列表,则reindex(columns=sort\u list)会抛出预期的元组,因为明显的原因会得到str。
0级
或1级
索引标签-它们是变量
In [132]: sort_list = ['DARK', 'ANTS', 'TWO']
如果我随后尝试在frame=frame[sort\u list]
或的上下文中传递此列表,则reindex(columns=sort\u list)
会抛出预期的元组,因为明显的原因会得到str
。是在单个级别索引上工作的解决方案
我想做的是只在顶层排序,让第二层保持原样。最后的数据帧看起来像这样
DARK ANTS TWO
thing1 thing1 thing3 thing1 thing4
0.1 a a 1 1
0.2 e e 2 2
1.0 i i 3 3
2.0 o o 4 4
您可以使用
reindex
frame.reindex(sort_list, level=0, axis=1)
Out[126]:
DARK ANTS TWO
thing1 thing1 thing3 thing1 thing4
0 0.1 a a 1 1
1 0.2 e e 2 2
2 1.0 i i 3 3
3 2.0 o o 4 4
选择1
您可以对索引排序,然后切片
frame.sort_index(axis=1, level=1)[['DARK', 'ANTS', 'TWO']]
DARK ANTS TWO
thing1 thing1 thing3 thing1 thing4
0 0.1 a a 1 1
1 0.2 e e 2 2
2 1.0 i i 3 3
3 2.0 o o 4 4
选择2 将列的第一级设置为已排序的类别
frame.columns = frame.columns.set_levels(
pd.CategoricalIndex(
frame.columns.levels[0],
['DARK', 'ANTS', 'TWO'],
ordered=True
), level=0
)
frame.sort_index(axis=1)
DARK ANTS TWO
thing1 thing1 thing3 thing1 thing4
0 0.1 a a 1 1
1 0.2 e e 2 2
2 1.0 i i 3 3
3 2.0 o o 4 4
我差点就吃到了谢谢@piRSquared,另一个以前未知的方法…:-)我不认为我今天没有看到新的东西。
frame.columns = frame.columns.set_levels(
pd.CategoricalIndex(
frame.columns.levels[0],
['DARK', 'ANTS', 'TWO'],
ordered=True
), level=0
)
frame.sort_index(axis=1)
DARK ANTS TWO
thing1 thing1 thing3 thing1 thing4
0 0.1 a a 1 1
1 0.2 e e 2 2
2 1.0 i i 3 3
3 2.0 o o 4 4