我有一个带有 3 个级别的 MultiIndex 的 Pandas DataFrame。假设我有以下数据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 colAA1 B1 1 cb1 ca1 2 cb2 ca2 B2 1 cb3 ca3 2 cb4 ca4A2 B1 1 cb5 ca5 2 cb6 ca6 B2 1 cb7 ca7 2 cb8 ca8现在,我有一个 MultiIndex 对象,其中包含前两个级别的索引,例如MultiIndex([('A1', 'B2'), ('A2', 'B1')], )我想使用该 MultiIndex 来选择与该 MultiIndex 对应的所有行,包括第 3 级的所有索引,例如, ColB colAA1 B2 1 cb3 ca3 2 cb4 ca4A2 B1 1 cb5 ca5 2 cb6 ca6我怎样才能做到这一点?我一直在寻找几个小时的答案,但我仍然毫无头绪。谢谢。
3 回答
湖上湖
TA贡献2003条经验 获得超2个赞
使用Index.isin
删除第 3 级并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
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
咱们试试吧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
添加回答
举报
0/150
提交
取消