Можно использовать np.where()
и np.take()
для выполнения требуемой операции.
binArray = np.array([[1, 0, 1]]) # Are you sure its not [] instead of [[]]
list = ('Text0', 'Text1', 'Text2')
indx = pd.Index(list)
# get indices for all 1 in binArray[0]
indices = np.where(binArray[0]==1)[0]
result = np.take(indx, indices)
Ваш результат теперь Index([u'Text0', u'Text2'], dtype='object')
, что вам и нужно.
Объяснение
np.take()
принимает массив и индексы в качестве аргументов и возвращает значения, соответствующие индексам из массива. Например:
>>> a = [4, 3, 5, 7, 6, 8]
>>> indices = [0, 1, 4]
>>> np.take(a, indices)
array([4, 3, 6])
np.where()
возвращает элементы из данного массива на основе заданного условия. В этом случае мы запрашиваем все индексы из binArray[0]
, где значение равно 1
, соответствующая карта которого в indx
- это то, что вам нужно в качестве конечного результата.