我对使用MultiIndex
时set_index
的行为感到惊讶。
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: pd.__version__
Out[3]: '0.19.2'
In [4]: columns = pd.MultiIndex.from_tuples([('foo', 'a'), ('foo', 'b'), ('bar', 'c')])
In [5]: df = pd.DataFrame(np.random.randint(0, 10, (3,3)), columns=columns)
In [6]: df.set_index([('bar', 'c')]).columns
Out[6]:
MultiIndex(levels=[['bar', 'foo'], ['a', 'b', 'c']],
labels=[[1, 1], [0, 1]])
为什么('bar', 'c')
仍然是列的一部分?它似乎与非MultiIndex
列不同,因为通过设置索引,它会从列中消失。
谢谢。
确实很奇怪。 它已经知道了很长一段时间。
这是一个[snarky]非常方便的工作[/snarky]
通过将列名称映射到自身来更改列名...
df.set_index([('bar', 'c')]).rename(
columns=df.columns.to_series().to_dict()).columns
MultiIndex(levels=[['foo'], ['a', 'b']],
labels=[[0, 0], [0, 1]])