python - 从查找表返回索引,允许空值且未找到

标签 python pandas numpy

我试图在查找表中查找索引,允许未找到的元素和不存在的元素(空)。

例如,在下面的测试数据中,变量“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/

相关文章:

python - pandas 加入 DataFrame 强制后缀?

python - 转置列表

python - 如何使用管理员在 Python 中运行 cmd 命令

python - 用于忠诚度计算的线路之间的时间增量

python - pandas.groupby().plot() 堆叠每组的行数,而不是实际值

python - 如何用python表达以下分段函数?

python - 如何将字符串变量缺失值的长度计算为零?

python - 将自定义 javascript 添加到 Python 中的 FastAPI Swagger UI 文档网页

python - 生成复制任意分布的随机数

python - pandas.cut 带有枚举的 bin