You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取DataFrame多层索引列get_level_values()唯一值的多种方法

获取多层列索引的唯一层级值(替代set方法)

问题场景

现有如下多层列索引的DataFrame:

import pandas as pd

df = pd.DataFrame(
    data=[
        [0.7804, 0.5294, 0.1895, 0.9195, 0.0508],
        [0.1703, 0.7095, 0.8704, 0.8566, 0.5513],
        [0.8147, 0.9055, 0.0506, 0.4212, 0.2464],
        [0.3985, 0.4515, 0.7118, 0.6146, 0.2682],
        [0.2505, 0.2752, 0.4097, 0.3347, 0.1296]
    ],
    index=pd.Index([0.0, 0.1, 0.2, 0.3, 0.4], name='Time'),
    columns=pd.MultiIndex.from_tuples(
        [('A', 'a1'), ('A', 'a2'), ('B', 'b1'), ('B', 'b2'), ('B', 'b3')],
        names=['kind', 'names']
    )
)

执行levs = df.columns.get_level_values("kind")后,得到包含重复值的索引:

Index(['A', 'A', 'B', 'B', 'B'], dtype='object', name='kind')

期望得到去重后的结果:

Index(['A', 'B'], dtype='object', name='kind')

已知通过levs = list(set(levs))可以实现,以下是几种更简便的替代方法:


方法1:调用Index的unique()方法

直接对get_level_values返回的索引对象调用unique(),结果仍为Index类型且保留原层级名称:

levs = df.columns.get_level_values("kind").unique()
# 输出:Index(['A', 'B'], dtype='object', name='kind')

方法2:直接取MultiIndex的levels属性

MultiIndex的levels属性本身存储各层级去重后的唯一值集合,只需定位目标层级的位置:

# 通过层级名称获取位置
level_idx = df.columns.names.index('kind')
levs = df.columns.levels[level_idx]
# 输出:Index(['A', 'B'], dtype='object')

该方法无需遍历重复值,执行效率更高。

方法3:转为分类索引后取categories

若后续需使用分类数据,可先将层级索引转为CategoricalIndex,再提取categories:

levs = df.columns.get_level_values("kind").astype('category').categories
# 输出:Index(['A', 'B'], dtype='object')

内容的提问来源于stack exchange,提问作者Barzi2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:50:27