1

当我有一个pandas.DataFrame dfwith 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"])

4

3 回答 3

1

我会建议:

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

或者

df[df.index.get_level_values('B') == val]

我想让后一个操作的语法更好一点。

于 2012-12-07T00:23:33.690 回答
0

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

  • 转换MultiIndex成列:df[df.reset_index()["B"] == 2]
  • 将我要使用的名称交换到开头,MultiIndex然后使用按索引查找:df.swaplevel(0, "B").ix[2]
于 2012-12-04T10:39:28.010 回答
0

我认为您希望按索引级别进行分组(请参阅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
于 2012-12-04T11:44:00.903 回答