2017-02-22 65 views
1

將多個標準(其中任何一個都是有效的)傳遞給一個數組並返回一個布爾指數然後可以用作過濾器的最佳方法是什麼?可用的解決方案遵循if,then框架,這比我需要的要多。布爾索引的多個標準

我知道我可以做到以下幾點:

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]]) 

但如果我有100名測試,而不是2?

回答

2

您可以將列表中的所有名字,然後用np.in1d生成mask

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

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

這是有益的,但我錯誤地以爲,這也爲大熊貓一系列的工作,同時還保留該系列的索引值。但它並沒有。還有另一個解決方案嗎? – trob

+0

如果你有一個熊貓系列,等效版本是'isin'方法。所以'names.isin(['Bob','Will'])'。 – Psidom