2017-02-22 4 views
1

複数の条件のいずれかを有効にして配列に渡し、ブールインデックスを返してフィルタとして使用する最良の方法はありますか?利用可能なソリューションは、必要以上のifフレームワークに従います。ブールインデックスの複数の基準

In[1]: 
names = np.array(['Bob','Joe','Bob','Will']) 
data = np.random.randn(4,4) 
mask = (names=='Bob')|(names=='Will') 
data[mask] 

Out[1]: 
array([[-0.25883247, -0.06236544, -0.02296274, 1.36340923], 
     [ 0.3907503 , -2.38917418, -0.49057852, -0.25427256], 
     [ 0.02648891, -1.27278901, -0.31815915, 1.72876199]]) 

しかし、私は2の代わりにテストするために100名を持っていたものとします。

私は、次の操作を行うことを理解しますか?

答えて

2

あなたは、リスト内のすべての名前を入れ、その後、maskを生成するnp.in1dを使用することができます。

mask = np.in1d(names, ['Bob', 'Will']) 

mask 
# array([ True, False, True, True], dtype=bool) 
+0

これは便利ですが、私は間違っても維持しながら、これはまた、パンダシリーズのために働くだろうと想定していましたその系列のインデックス値しかし、それはしません。他にも解決策はありますか? – trob

+0

パンダシリーズをお持ちの場合、同等のバージョンは 'isin'メソッドです。だから 'names.isin(['Bob'、 'Will'])'。 – Psidom

関連する問題