使用Pandas MultiIndex选择多行分层DataFrame



我有一个Pandas DataFrame,具有3个级别的MultiIndex。假设我有以下数据

df = pd.DataFrame({'ColB': {('A1', 'B1', 1): 'cb1',
('A1', 'B1', 2): 'cb2',
('A1', 'B2', 1): 'cb3',
('A1', 'B2', 2): 'cb4',
('A2', 'B1', 1): 'cb5',
('A2', 'B1', 2): 'cb6',
('A2', 'B2', 1): 'cb7',
('A2', 'B2', 2): 'cb8'},
'colA': {('A1', 'B1', 1): 'ca1',
('A1', 'B1', 2): 'ca2',
('A1', 'B2', 1): 'ca3',
('A1', 'B2', 2): 'ca4',
('A2', 'B1', 1): 'ca5',
('A2', 'B1', 2): 'ca6',
('A2', 'B2', 1): 'ca7',
('A2', 'B2', 2): 'ca8'}})
ColB colA
A1 B1 1  cb1  ca1
2  cb2  ca2
B2 1  cb3  ca3
2  cb4  ca4
A2 B1 1  cb5  ca5
2  cb6  ca6
B2 1  cb7  ca7
2  cb8  ca8

现在,我有一个MultiIndex对象,它包含前两个级别的索引,比如

MultiIndex([('A1', 'B2'),
('A2', 'B1')],
)

我想使用该MultiIndex来选择与该MultiIndex对应的所有行,包括级别3的所有索引,例如

ColB colA
A1 B2 1  cb3  ca3
2  cb4  ca4
A2 B1 1  cb5  ca5
2  cb6  ca6

我该怎么做?我已经找了好几个小时的答案了,但还是毫无头绪。非常感谢。

使用Index.isin,通过MultiIndex.droplevel删除第三级并通过boolean indexing:进行过滤

df = df[df.index.droplevel(2).isin(mux)]
print (df)
ColB colA
A1 B2 1  cb3  ca3
2  cb4  ca4
A2 B1 1  cb5  ca5
2  cb6  ca6

它适用于任何index:

mux = pd.MultiIndex.from_tuples([('A1', 'B1'),('A2', 'B2')])
df = df[df.index.droplevel(2).isin(mux)]
print (df)
ColB colA
A1 B1 1  cb1  ca1
2  cb2  ca2
A2 B2 1  cb7  ca7
2  cb8  ca8

我想这就是你想要的,你可以试试。

df[('A1','B1')]

KR,Alex

让我们试试Advanced indexing with hierarchical index

df.loc[('A1', 'B2'):('A2','B1')]
Out[56]: 
ColB colA
A1 B2 1  cb3  ca3
2  cb4  ca4
A2 B1 1  cb5  ca5
2  cb6  ca6

最新更新