使用多索引选择多行分层数据帧

2024-09-29 02:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多索引的熊猫数据框架,有3个级别。假设我有以下数据

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([('A1', 'B2'),
            ('A2', 'B1')],
           )

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

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

我该怎么做?我已经寻找答案好几个小时了,但我仍然没有任何线索。多谢各位


Tags: a2a1级别b2b1colbcolaca4
3条回答

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

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

韩国, 亚历克斯

让我们试试^{}

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

使用^{}^{}删除第三级,并使用^{}过滤:

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

相关问题 更多 >