Python 索引上的布尔索引(而不是数据帧)

Python 索引上的布尔索引(而不是数据帧),python,pandas,Python,Pandas,当我有一个pandas.DataFramedf列[“a”、“B”、“C”、“D”]时,我可以使用类似df[df[“B”]==2]的结构对其进行过滤 如果B是a多索引中的一个级别的名称,我如何做df[df[“B”]==2],(例如,通过df.groupby([“a”,“B”]).mean()或df.setindex([“a”,“B”]))获得的方法有两种,这两条路看起来都像是一条弯路——这让我觉得一定有一条更好的路我忽略了 将多索引转换为列:df[df.reset_index()[“B”]==2

当我有一个
pandas.DataFrame
df
[“a”、“B”、“C”、“D”]
时,我可以使用类似
df[df[“B”]==2]的结构对其进行过滤


如果
B
是a
多索引中的一个级别的名称,我如何做
df[df[“B”]==2]
(例如,通过
df.groupby([“a”,“B”]).mean()或
df.setindex([“a”,“B”])
)获得的方法有两种,这两条路看起来都像是一条弯路——这让我觉得一定有一条更好的路我忽略了

  • 将多索引转换为列:
    df[df.reset_index()[“B”]==2]
  • 将我要使用的名称交换到多索引的开头,然后使用按索引查找:
    df.swaplevel(0,“B”).ix[2]

我看到了两种方法,这两种方法看起来都像是绕道而行——这让我觉得一定有一种更好的方法,我忽略了

  • 将多索引转换为列:
    df[df.reset_index()[“B”]==2]
  • 将我要使用的名称交换到多索引的开头,然后使用按索引查找:
    df.swaplevel(0,“B”).ix[2]

我认为您希望按索引级别进行分组(请参阅)。
下面是一个简短但不太令人兴奋的例子:

In [126]: df = DataFrame([[1,2,3,4],[2,2,np.nan,6]],columns=["A", "B", "C", "D"])

In [127]: df1 = df.set_index(['A','B'])

In [128]: df1
Out[128]: 
      C  D
A B       
1 2   3  4
2 2 NaN  6

In [129]: df1.groupby(level='B', axis=0).mean()
Out[129]: 
   C  D
B      
2  3  5

我认为您希望按索引级别进行分组(请参阅)。
下面是一个简短但不太令人兴奋的例子:

In [126]: df = DataFrame([[1,2,3,4],[2,2,np.nan,6]],columns=["A", "B", "C", "D"])

In [127]: df1 = df.set_index(['A','B'])

In [128]: df1
Out[128]: 
      C  D
A B       
1 2   3  4
2 2 NaN  6

In [129]: df1.groupby(level='B', axis=0).mean()
Out[129]: 
   C  D
B      
2  3  5

我建议:

df.xs(2,level='B')

df[df.index.get_level_值('B')==val]


我想使后一个操作的语法更精确一些。

我建议:

df.xs(2,level='B')

df[df.index.get_level_值('B')==val]

我想使后一个操作的语法稍微好一点