【发布时间】:2015-05-29 18:27:48
【问题描述】:
我有一个带有 3 级 MultiIndex 的 pandas 数据框。我正在尝试根据对应于两个级别的值列表提取此数据帧的行。
我有这样的事情:
ix = pd.MultiIndex.from_product([[1, 2, 3], ['foo', 'bar'], ['baz', 'can']], names=['a', 'b', 'c'])
data = np.arange(len(ix))
df = pd.DataFrame(data, index=ix, columns=['hi'])
print(df)
hi
a b c
1 foo baz 0
can 1
bar baz 2
can 3
2 foo baz 4
can 5
bar baz 6
can 7
3 foo baz 8
can 9
bar baz 10
can 11
现在我想获取索引级别“b”和“c”在此索引中的所有行:
ix_use = pd.MultiIndex.from_tuples([('foo', 'can'), ('bar', 'baz')], names=['b', 'c'])
即hi 的值在级别 b 和 c 中分别具有 ('foo', 'can') 或 ('bar', 'baz'):(1, 2, 5, 6, 9, 10)。
所以我想在第一层取slice(None),并在第二层和第三层提取特定的元组。
最初我认为将多索引对象传递给 .loc 会提取出我想要的值/级别,但这不起作用。做这种事情的最佳方法是什么?
【问题讨论】:
-
我进行了几次不同的尝试以使其发挥作用。我想我已经找到了一个不错的解决方法,即目前这似乎有点困难。试试看!
标签: python pandas dataframe multi-index