【发布时间】:2021-03-03 03:07:53
【问题描述】:
我有这个 DataFrame,它有一个 MultiIndex,字段为 Hi、Md、Lo
import pandas as pd
df = pd.DataFrame(
[
["A", "X", "C", "7", "3"],
["A", "B", "C", "7", "2"],
["A", "B", "C", "7", "1"],
["A", "X", "C", "7", "3"],
["1", "2", "3", "7", "3"],
["4", "5", "6", "7", "3"],
],
columns=["Hi", "Md", "Lo", "O", "I"],
).set_index(["Hi", "Md", "Lo"])
看起来像这样
O I
Hi Md Lo
A X C 7 3
B C 7 2
C 7 1
X C 7 3
1 2 3 7 3
4 5 6 7 3
如何设置过滤器以仅获取 Md 具有值 B
的行我尝试通过字段名
df[df['Md'] == 'B']
这会引发 KeyError,因为“字段”不是列,而是 MultiIndex 的一部分
df[df.index.map(lambda x: x[1] == 'B')]
有效,但非常hacky。
有没有更短的方法来编写这个过滤器,可能使用字段名称Md或索引位置1?
【问题讨论】:
-
df.xs('B', level='Md', axis='index')(xs = "横截面") -
年 前的这个问题(我的)有点过时了,但答案仍然适用stackoverflow.com/questions/12047418/…
标签: python pandas filter multi-index