当我有一个pandas.DataFrame
df
with columns["A", "B", "C", "D"]
时,我可以使用诸如df[df["B"] == 2]
.
df[df["B"] == 2]
如果B
是 a 中的级别名称,我该怎么做MultiIndex
?(例如,通过df.groupby(["A", "B"]).mean()
或获得df.setindex(["A", "B"])
)
我会建议:
df.xs(2, level='B')
或者
df[df.index.get_level_values('B') == val]
我想让后一个操作的语法更好一点。
我看到了两种方法,这两种方法看起来都像是绕道而行——这让我觉得一定有更好的方法,但我忽略了。
MultiIndex
成列:df[df.reset_index()["B"] == 2]
MultiIndex
然后使用按索引查找:df.swaplevel(0, "B").ix[2]
我认为您希望按索引级别进行分组(请参阅GroupBy 和 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