2017-02-22 37 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