熊猫:按标签获取唯一的MultiIndex级别值

ojdo:

假设您有此MultiIndex-ed DataFrame:

df = pd.DataFrame({'co':['DE','DE','FR','FR'],
                   'tp':['Lake','Forest','Lake','Forest'],
                   'area':[10,20,30,40],
                   'count':[7,5,2,3]})
df = df.set_index(['co','tp'])

看起来像这样:

           area  count
co tp
DE Lake      10      7
   Forest    20      5
FR Lake      30      2
   Forest    40      3

我想检索每个索引级别的唯一值这可以通过使用

df.index.levels[0]  # returns ['DE', 'FR]
df.index.levels[1]  # returns ['Lake', 'Forest']

真正想做的是通过按名称(即'co'和)对级别进行寻址来检索这些列表'tp'我可以找到的最短的两种方法如下所示:

list(set(df.index.get_level_values('co')))  # returns ['DE', 'FR']
df.index.levels[df.index.names.index('co')]  # returns ['DE', 'FR']

但是他们都不是非常优雅。有没有更短的方法?

Pietro Battiston:

熊猫0.23.0终于推出了更清洁的解决了这个问题:level参数Index.unique()

In [3]: df.index.unique(level='co')
Out[3]: Index(['DE', 'FR'], dtype='object', name='co')

现在,这是推荐的解决方案。它效率更高,因为它避免了在内存中创建电平值的完整表示并进行重新扫描。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章