python - 根据where条件将列添加到numpy数组

标签 python arrays numpy

我有一个 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,您可能需要将其定义为 floatfloat32(因为您尝试插入的值是 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/

相关文章:

python - 通过 webapp2 访问 URI 参数

javascript - 在 JavaScript 中搜索数组的元素

javascript - 使用 Javascript 使用 indexof value 返回第二个数组中的值

javascript - 无法定义数组元素

python - 将 "complex array"拆分为 "real"和 "imaginary"数组的快捷方式

python - 面板数据 - 在 Pandas 中保留至少拥有 3 年数据的公司

python - 仅在 Django 启动 ONCE 时执行代码?

python - 如何用盐检查_password()?

python - 使用 Twisted 子进程和 virtualenvwrapper 时如何导入模块?

python - 数组的最长前缀等于一个值