Индекс возврата из таблицы поиска, допускающий значения NULL и не найденный - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь найти индекс в справочной таблице, учитывающий элементы, которые не найдены, и элементы, которых не существует (null).

Например, в приведенных ниже тестовых данных переменная «A» будет отображатьсяк «A» в таблице поиска и возвращаем индекс 0 (позиция «A» в таблице поиска)

Я смотрел на использование функции searchsorted, но не объяснил, является ли 0 илиВозвращается N.

"Если подходящего индекса нет, верните либо 0, либо N (где N - длина a)."

Ниже приведены данные, которые я хотел бы получитьвозвращаемое значение: [0,1,2,3,2]

0 - совпадение по A, 1 - совпадение по B, 2 - не найдено, следовательно, Остальное, 3 - нет значения, следовательно, NULL, 2 - не найденоследовательно, еще.

с правилами:

Если индекс возврата совпадения совпадений, если NaN возвращает NULL, если не найден, возвращать еще.

testData = np.array(['A','B','B ',NAN,'Other'])
testLookup =np.array(['A','B','ELSE','NULL'])

>>> np.searchsorted(testLookup,testData)
array([0, 1, 2, 0, 4], dtype=int32)

1 Ответ

0 голосов
/ 05 февраля 2019

NumPy не предназначен для массивов смешанного типа.Но если вы намереваетесь использовать NumPy, вы можете просто преобразовать свои значения соответствующим образом с помощью логического индексирования до , используя np.searchsorted.

Просто не забудьте указать dtype=object, чтобы избежать np.nanзначения автоматически преобразуются в строки.

testData = np.array(['A','B','B ',np.nan,'Other'], dtype=object)
testLookup = np.array(['A','B','ELSE','NULL'])

arr = testData.copy()
nulls = np.array([x != x for x in arr])
arr[nulls] = 'NULL'
arr[~np.in1d(arr, testLookup[:2]) & ~nulls] = 'ELSE'  # or use np.isin

res = np.searchsorted(testLookup, arr)

# array([0, 1, 2, 3, 2], dtype=int64)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...