Pandas set_index包含Multiiindex和列

时间:2017-04-05 09:07:25

标签: python pandas

使用Cmdline: /data/data/com.my.app_package/simpleperf record -p 10910 --duration 5 Arch: arm64 Event: cpu-cycles (type 0, config 0) Samples: 0 Event count: 0 Overhead Command Pid Tid Shared Object Symbol 时,我对set_index的行为感到惊讶。

MultiIndex

为什么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')列不同,因为通过设置索引,它会从列中消失。

感谢。

1 个答案:

答案 0 :(得分:1)

确实很奇怪。它已经有一段时间了。

这是一个 [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]])