我试图在查找表中查找索引,允许未找到的元素和不存在的元素(空)。
例如,在下面的测试数据中,变量“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)
最佳答案
NumPy 不是为混合类型数组设计的。但是,如果您打算使用 NumPy,则可以在使用 np.searchsorted
之前通过 bool 索引适当转换您的值。
只需记住指定 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)
关于python - 从查找表返回索引,允许空值且未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54533663/