假设您有这个多索引ed数据帧:
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']
但没有一个非常优雅。有较短的路吗?
我想您需要在多索引的某个级别(以及按级别名称)中使用唯一值。我通常做以下的,这有点长。
Pandas 0.23.0终于introduced解决这个问题的一个更清晰的解决方案:对
Index.unique()
的level
参数:这是现在推荐的解决方案。它的效率更高,因为它避免了在内存中创建级别值的完整表示,并重新扫描它。
另一种方法是通过调用
df.index.levels[level_index]
来查找级别数,其中可以从df.index.names.index(level_name)
推断级别索引。在上面的示例中,level_name='co'。@Happy001提出的答案计算出了唯一的,可能需要大量计算。
相关问题 更多 >
编程相关推荐