Pandas selection by MultiIndex
关于通过MultiIndex选择行的问题。
DF:
1 2 3 4 5 6 7 8 9 10 | colA ColB A1 B1 1 ca1 cb1 2 ca2 cb2 B2 1 ca3 cb3 2 ca4 cb4 A2 B1 1 ca5 cb5 2 ca6 cb6 B2 1 ca7 cb7 2 ca8 cb8 |
我想从A2 / B1中选择colA,其中MultiIndex级别(2)> 1。
我是通过多个步骤完成的:
1 | df1=df.loc[A2,[B7],:,] |
由于某种原因,我必须在括号中显示级别(1)
1 2 3 4 5 | df1.index = x1.index.droplevel(0) df1.index = x1.index.droplevel(0) df1.loc[1:,'colA'] |
我知道这太过分,但我不知道如何更简单地做到这一点。 我能想到的方法不想工作。
您也可以在两个操作中完成。 首先使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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'}}) # Answer here df.loc["A2","B1"].query("index > 1") Output: ColB colA 2 cb6 ca6 |
由于您使用的是未命名的索引列,因此一种方法是在
1 2 3 4 | df.query("ilevel_0 == 'A2' and ilevel_1 == 'B1' and ilevel_2 > 1") colA ColB A2 B1 2 ca6 cb6 |
另一种方法是使用
1 2 3 4 5 | f = df.index.get_level_values df.loc[(f(0) == 'A2') & (f(1) == 'B1') & (f(2) > 1)] colA ColB A2 B1 2 ca6 cb6 |