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]
我想使后一个操作的语法稍微好一点