我有一个DataFrame,看起来像这样:
>>> df = pd.DataFrame(index=pd.MultiIndex.from_tuples([(num,letter,color)
for num in range(1,3)
for letter in ['a','b','c'] for color in ['Red','Green']],
names=['Number','Letter','Color']))
>>> df['Value'] = np.random.randint(1,100,len(df))
>>> df
Value
Number Letter Color
1 a Red 97
Green 61
b Red 97
Green 98
c Red 91
Green 47
2 a Red 17
Green 63
b Red 26
Green 73
c Red 34
Green 68
但我实际上希望我的索引按“字母、颜色、数字”排序。
我目前的做法如下:
>>> df.reset_index().set_index(['Letter','Color','Number'])
Value
Letter Color Number
a Red 1 97
Green 1 61
b Red 1 97
Green 1 98
c Red 1 91
Green 1 47
a Red 2 17
Green 2 63
b Red 2 26
Green 2 73
c Red 2 34
Green 2 68
这是最好的办法吗?
2条答案
按热度按时间km0tfn4u1#
最好使用
reorder_levels
来操作MultiIndex级别的顺序,只需按照您想要的顺序传入一个级别名称/编号列表:如果你只是想交换两个级别的位置,还有
swaplevel
。qpgpyjmq2#
就地修改
调用**
MultiIndex.reorder_levels
**,然后将新索引分配给DataFrame。因为Index对象是不可变的,所以创建一个新的Index是不可能的,但是可以通过调用
df.reorder_levels
来避免重复数据。