Pandas set_index with Multiiindex and columns



我对使用MultiIndexset_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]])

最新更新