当我有pandas.DataFrame
df
列["A", "B", "C", "D"]
时,我可以使用df[df["B"] == 2]
等结构对其进行过滤。
如果df[df["B"] == 2]
是[{1}}中某个级别的名称而不是B
,我该如何做相当于MultiIndex
的工作?(例如,获取者df.groupby(["A", "B"]).mean()
或df.setindex(["A", "B"])
)
答案 0 :(得分:1)
我建议:
df.xs(2, level='B')
或
df[df.index.get_level_values('B') == val]
我想让后一种操作的语法更好一些。
答案 1 :(得分:0)
我看到了两种获得这种方式的方法,这两种方式看起来都像绕道而行 - 这让我觉得必须有一种更好的方式让我忽视。
MultiIndex
转换为列:df[df.reset_index()["B"] == 2]
MultiIndex
的开头,然后按索引使用查找:df.swaplevel(0, "B").ix[2]
答案 2 :(得分:0)
我认为您希望按指数级别进行分组(请参阅GroupBy with MultiIndex) 这是一个简短但不太令人兴奋的例子:
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