119

列「A」と「B」を持つマルチインデックス データ フレームがあります。

インデックスを単一の列インデックスにリセットせずに、マルチインデックスの 1 つの列をフィルタリングして行を選択する方法はありますか?

例えば。

# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to     specify a tuple

df.ix[df.A ==1]
4

7 に答える 7

171

get_level_values1 つの方法は、 Index メソッドを使用することです。

In [11]: df
Out[11]:
     0
A B
1 4  1
2 5  2
3 6  3

In [12]: df.iloc[df.index.get_level_values('A') == 1]
Out[12]:
     0
A B
1 4  1

xs0.13 では、drop_level引数で使用できるようになります:

df.xs(1, level='A', drop_level=False) # axis=1 if columns

注: これがインデックスではなく列の MultiIndex である場合は、同じ手法を使用できます。

In [21]: df1 = df.T

In [22]: df1.iloc[:, df1.columns.get_level_values('A') == 1]
Out[22]:
A  1
B  4
0  1
于 2013-09-16T18:48:54.397 に答える
3

別のオプションは次のとおりです。

filter1 = df.index.get_level_values('A') == 1
filter2 = df.index.get_level_values('B') == 4

df.iloc[filter1 & filter2]
Out[11]:
     0
A B
1 4  1
于 2019-08-01T03:39:51.640 に答える