有没有办法获得 get_level_values
多列的结果?
给定以下 DataFrame
:
d
a b c
1 4 10 16
11 17
5 12 18
2 5 13 19
6 14 20
3 7 15 21
我希望获得级别 a
和 c
的值( 即 元组列表):
[(1, 10), (1, 11), (1, 12), (2, 13), (2, 14), (3, 15)]
笔记:
不可能给
get_level_values
超过一级( 例如df.index.get_level_values(['a','c']
)有一种解决方法,可以在每个所需的列上使用
get_level_values
和zip
它们一起使用:
例如:
a_list = df.index.get_level_values('a').values
c_list = df.index.get_level_values('c').values
print([i for i in zip(a_list,c_list)])
[(1, 10), (1, 11), (1, 12), (2, 13), (2, 14), (3, 15)]
但随着列数的增加,它会变得很麻烦。
- 构建示例的代码
DataFrame
:
df = pd.DataFrame({'a':[1,1,1,2,2,3],'b':[4,4,5,5,6,7,],'c':[10,11,12,13,14,15], 'd':[16,17,18,19,20,21]}).set_index(['a','b','c'])
原文由 danielhadar 发布,翻译遵循 CC BY-SA 4.0 许可协议
--- 的
.tolist()
方法给出了MultiIndex
MultiIndex
所有级别的元组列表。例如,对于您的示例DataFrame
,所以这里有两个想法:
MultiIndex
中获取元组列表并过滤结果。这种简单方法的缺点是您必须手动指定所需级别的顺序。您可以利用
itertools.compress
按名称选择它们。.tolist()
。如果你更愿意命名你想要保留的级别——而不是那些你想要删除的级别——你可以做类似的事情