简单的熊猫MultiIndex切片

时间:2017-01-17 17:13:40

标签: python pandas

我有以下DataFrame

df_1 = DataFrame({
        "alpha" : [1,1,1,2,2,2,3,3,3] ,
        "beta" : [3,4,5,3,4,5,3,4,5] ,
        "val_1" : ["x", "y" , "z", "w", "a", "b", "v1" , "v2" , "v3" ] ,
        "val_2" : ["z1", "z2" , "z3", "w1", "w2", "w3" , "zz1" , "zz2" , "zz3" ]
    })
df_1.set_index(["alpha", "beta"], inplace=True)

我正在尝试选择以下突出显示的行:

enter image description here

beta为3或5的每一行。

我已多次浏览pandas文档,但无法找到解决方法。最接近我认为必须回答的是:

df_1.xs((3,5), level="beta", drop_level=False)

现在哪个失败了。得到这个的正确索引/切片方法是什么?

3 个答案:

答案 0 :(得分:4)

您可以使用DF.query()方法根据指定的值进行子集化:

df_1.query('beta == 3 or beta == 5')  # More succintly : df_1.query('beta == [3,5]')

enter image description here

答案 1 :(得分:2)

另一种选择是使用get_level_valuesisin来构建索引的逻辑系列:

df_1[df_1.index.get_level_values(1).isin([3,5])]

enter image description here

答案 2 :(得分:2)

您可以使用pd.IndexSlice。文档中直接有very similar example

df_1.loc[pd.IndexSlice[:, [3,5]], :]


           val_1 val_2
alpha beta            
1     3        x    z1
      5        z    z3
2     3        w    w1
      5        b    w3
3     3       v1   zz1
      5       v3   zz3