我有一个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