1

pandas.DataFrame dfwith columnsがある場合["A", "B", "C", "D"]、 のような構造を使用してフィルタリングできますdf[df["B"] == 2]

レベルの名前が代わりにあるdf[df["B"] == 2]場合、どうすればと同等のことを行うことができますか? BMultiIndexdf.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

これを取得するには 2 つの方法がありますが、どちらも回り道のように見えます。見落としているより良い方法があるに違いないと思います。

  • MultiIndexを列に変換する:df[df.reset_index()["B"] == 2]
  • 使用したい名前を先頭に入れ替えてから、MultiIndexインデックスによるルックアップを使用します。df.swaplevel(0, "B").ix[2]
于 2012-12-04T10:39:28.010 に答える
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
于 2012-12-04T11:44:00.903 に答える