Python 使用多索引和列设置索引

Python 使用多索引和列设置索引,python,pandas,Python,Pandas,当使用多索引时,set\u index的行为让我感到惊讶 [1]中的:将熊猫作为pd导入 在[2]中:将numpy作为np导入 在[3]中:pd.\u版本__ 输出[3]:“0.19.2” 在[4]中:columns=pd.MultiIndex.from_元组([('foo','a'),('foo','b'),('bar','c')) [5]中:df=pd.DataFrame(np.random.randint(0,10,(3,3)),columns=columns) 在[6]中:df.set_

当使用
多索引时,
set\u index
的行为让我感到惊讶

[1]中的
:将熊猫作为pd导入
在[2]中:将numpy作为np导入
在[3]中:pd.\u版本__
输出[3]:“0.19.2”
在[4]中:columns=pd.MultiIndex.from_元组([('foo','a'),('foo','b'),('bar','c'))
[5]中:df=pd.DataFrame(np.random.randint(0,10,(3,3)),columns=columns)
在[6]中:df.set_index([('bar','c')])列
出[6]:
多索引(级别=['bar'、['foo']、['a'、[b'、[c']],
标签=[[1,1],[0,1]]
为什么
('bar','c')
仍然是列的一部分?它似乎不同于非
多索引
列,因为通过设置索引,它将从列中消失


谢谢。

确实很奇怪。人们知道它已经有相当一段时间了

这里有一个非常方便的解决方法

通过将列名映射到列名本身来更改列名

df.set_index([('bar', 'c')]).rename(
    columns=df.columns.to_series().to_dict()).columns

MultiIndex(levels=[['foo'], ['a', 'b']],
           labels=[[0, 0], [0, 1]])

真奇怪。但是请注意,
('bar','c')
是级别的一部分,而不是列的一部分:
df.set_index([('bar','c')]).columns.tolist()
返回
[('foo','a'),('foo','b')]
。谢谢您的评论。我没有注意到这些水平只是没有受到影响。