使用 Pandas MultiIndex 选择多行分层 DataFrame

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

我怎样才能做到这一点?我一直在寻找几个小时的答案,但我仍然毫无头绪。谢谢。


肥皂起泡泡
浏览 186回答 3
3回答

湖上湖

使用Index.isin删除第 3 级并MultiIndex.droplevel过滤boolean indexing:df = df[df.index.droplevel(2).isin(mux)]print (df)        ColB colAA1 B2 1  cb3  ca3      2  cb4  ca4A2 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 colAA1 B1 1  cb1  ca1      2  cb2  ca2A2 B2 1  cb7  ca7      2  cb8  ca8

牛魔王的故事

我想这就是你要找的,你可以试试。    df[('A1','B1')]KR,亚历克斯

拉风的咖菲猫

咱们试试吧Advanced indexing with hierarchical indexdf.loc[('A1', 'B2'):('A2','B1')]Out[56]:         ColB colAA1 B2 1  cb3  ca3      2  cb4  ca4A2 B1 1  cb5  ca5      2  cb6  ca6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python