我有一个 numpy 数组,我想用第二个数组中的数据更新其中的一列值。有点像 excel 中的 vlookup 函数。
需要在b
表中查找a
的第一列。然后将 a
中的第二列替换为 b
中第二列的数字。
import numpy as np
# type, newval
a = np.array( [[1, 23, 0],
[2, 24, 0],
[1, 15, 0],
[1, 27, 0],
[6, 22, 0],
[1, 18, 0]]
)
# type, newval
b = np.array([[1, 1.1],
[2, 2.1],
[3, 3.1],
[4, 4.1],
[5, 5.1],
[6, 6.1]]
)
a[:,2] = np.where(b[:,0] == a[:,0], b[:,1], None)
预期结果
注意:我希望使用查找值更新原始数组 a
。
a = array( [[1, 23, 1.1],
[2, 24, 2.1],
[1, 15, 1.1],
[1, 27, 1.1],
[6, 22, 6.1],
[1, 18, 1.1]]
)
然而,我得到的是数组中最后 4 项旁边的 nan
。它就像我的 np.where
条件正在替换位置和数字正确的值,而不仅仅是数字匹配的地方。
最佳答案
您可以将数组 b
转换为字典。
之后可以通过列表推导来存档所需的结果。
b_as_dict = dict(b)
res = [[k, b_as_dict[k]] for k in a[:,0]]
关于将这些结果插入a
:
目前 a
是一个整数数组。要将这些结果放入 a
,您可能需要将其定义为 float
或 float32
(因为您尝试插入的值是 float ):
a = np.array([[1, 23, 0],
[2, 24, 0],
[1, 15, 0],
[1, 27, 0],
[6, 22, 0],
[1, 18, 0]],
dtype=np.float32)
然后您可以按照 Zinjaai 的建议使用列表推导式:
a[:, 2] = [b_as_dict[k] for k in a[:, 0]]
关于python - 根据where条件将列添加到numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083283/