2017-07-13 7 views
1

私はマルチインデックスのデータフレームがある場合:フィルタリング

import pandas as pd 
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['a','b','c']).set_index(['a','b']) 

が、私は単純に、たとえば、カラムのデータフレームをフィルタリングすることができます。

​​

しかし行うにはインデックスのレベルで同じ、私が行うことができない、「B」と言う:

df[df.b>4] 

は、代わりに私が行うことができます。

df[df.index.get_level_values('b')>4] 

これを行う方法はそれほど冗長ではありませんか?

答えて

8

あなたは、読みやすく

In [795]: df.query('b > 4') 
Out[795]: 
    c 
a b 
4 5 6 
7 8 9 
+0

良いものをありがとうqueryを使用することができます。ただし、get_level_valuesと比較して20%のパフォーマンス上のペナルティがあるようです。 – dlm

+0

そうです、[クエリ](https://pandas.pydata.org/pandas-docs/stable/indexing.html#performance-of-query)は、より大きなデータフレームでうまく機能します。 – Zero