Python 布尔索引的多个标准

Python 布尔索引的多个标准,python,filter,boolean,Python,Filter,Boolean,将多个条件(其中任何一个条件都有效)传递给数组并返回布尔索引的最佳方法是什么?可用的解决方案遵循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.06236

将多个条件(其中任何一个条件都有效)传递给数组并返回布尔索引的最佳方法是什么?可用的解决方案遵循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个呢

您可以将所有名称放在一个列表中,然后使用
np.inad
生成
掩码

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

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

这是有帮助的,但我错误地认为这也适用于熊猫系列,同时保留该系列的索引值。但事实并非如此。还有其他解决方案吗?如果您有熊猫系列,等效的版本是
isin
method。所以
names.isin(['Bob','Will'])