为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas MultiIndex 选择多行分层 DataFrame

使用 Pandas MultiIndex 选择多行分层 DataFrame

肥皂起泡泡 2023-06-20 15:56:42
我有一个带有 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


查看完整回答
反对 回复 2023-06-20
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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

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

KR,亚历克斯


查看完整回答
反对 回复 2023-06-20
?
拉风的咖菲猫

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


查看完整回答
反对 回复 2023-06-20
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信