Python:重新映射并减少数字范围

时间:2019-06-04 07:53:41

标签: python pandas scale rescale

我有一些很大的唯一数字,它们代表设备的身份

clusteringOutput[:,1]
Out[140]: 
array([1.54744609e+12, 1.54744946e+12, 1.54744133e+12, ...,
       1.54744569e+12, 1.54744570e+12, 1.54744571e+12])

尽管数字很大,但它们只是重复输入的少数几个。

我想将它们重新映射为较小的整数范围。因此,如果这些数字只是100个不同的值,那么我想使用一个映射表以1-100的比例将它们映射,该映射表使我能够查找和查看这些映射。

在Internet中,重新映射功能通常会重新缩放,而我不想重新缩放。我想要一个具体的整数,将更长的ID映射为更简单的眼睛编号。

关于如何实现这一点的任何想法?如果有帮助,我可以使用熊猫数据框。

非常感谢 亚历克斯

1 个答案:

答案 0 :(得分:2)

numpy.uniquereturn_inverse=True一起使用:

import numpy as np

arr = np.array([1.54744609e+12,
                1.54744946e+12,
                1.54744133e+12,
                1.54744133e+12,
                1.54744569e+12, 
                1.54744570e+12, 
                1.54744571e+12])

mapper, ind = np.unique(arr, return_inverse=True)

ind的输出:

array([4, 5, 0, 0, 1, 2, 3])

使用mapper重新映射:

mapper[ind]

# array([1.54744609e+12, 1.54744946e+12, 1.54744133e+12, 1.54744133e+12,
#       1.54744569e+12, 1.54744570e+12, 1.54744571e+12])

验证:

all(arr == mapper[ind])
# True