Извлечение индекса панд с помощью двоичного массива - PullRequest
0 голосов
/ 30 апреля 2018
import pandas as pd
import numpy as np


binArray = np.array([[1, 0, 1]])
print(binArray)
list = ('Text0', 'Text1', 'Text2')
indx = pd.Index(list)
print(indx)

Привет!

Как извлечь «Text0» и «Text2» с помощью переменной binArray? Обратите внимание, что binArray и indx всегда будут иметь длину N в моем коде.

Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2018

Можно использовать 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 - это то, что вам нужно в качестве конечного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...