我有以下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)
我正在尝试选择以下突出显示的行:
即beta
为3或5的每一行。
我已多次浏览pandas文档,但无法找到解决方法。最接近我认为必须回答的是:
df_1.xs((3,5), level="beta", drop_level=False)
现在哪个失败了。得到这个的正确索引/切片方法是什么?
答案 0 :(得分:4)
您可以使用DF.query()
方法根据指定的值进行子集化:
df_1.query('beta == 3 or beta == 5') # More succintly : df_1.query('beta == [3,5]')
答案 1 :(得分:2)
答案 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