首页 > 解决方案 > 如何用另一个数组中唯一值的索引替换 numpy 数组中的重复值?

问题描述

我有一个包含重复元素的数组 a 和第二个数组 b,其中包含来自 a 的排序的唯一值(以及辅助“索引数组”c):

a = np.array(['Bob', 'Anna', 'Bob', 'Charly', 'Bob'])
b = sorted(np.unique(a))
c = np.arange(len(b))
>>> b
array(['Anna', 'Bob', 'Charly'])
>>> c
array([0, 1, 2])

我想要的是一个数组 d,其中来自 a 的值被它们在 b 中的索引替换。预期结果应如下所示:

>>>d
array([1, 0, 1, 2, 1])

任何如何获得预期结果的建议将不胜感激。

标签: pythonarraysnumpy

解决方案


无需创建bor c,您可以使用np.unique并让它返回inverse

d = np.unique(a, return_inverse = True)[1]                                                           
>>> d
array([1, 0, 1, 2, 1])

以供参考:

return_inverse :布尔值,可选

如果为 True,则还返回可用于重建 ar 的唯一数组的索引(对于指定的轴,如果提供)。

替代熊猫解决方案:

import pandas as pd
pd.Categorical(a).codes
array([1, 0, 1, 2, 1], dtype=int8)

推荐阅读