簡體   English   中英

根據where條件將列添加到numpy數組

[英]Adding column to numpy array based on where condition

我有一個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 (因為您嘗試插入的值是浮點數):

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]]

如果b是排序和連續的,那么簡單的解決方案是:

In [19]: b[a[:,0]-1]
Out[19]: 
array([[ 1. ,  1.1],
       [ 2. ,  2.1],
       [ 1. ,  1.1],
       [ 1. ,  1.1],
       [ 6. ,  6.1],
       [ 1. ,  1.1]])

或者,有點慢:

In [20]: a[:,0]
Out[20]: array([1, 2, 1, 1, 6, 1])

通過減法1,這些是我們的數組b的索引

In [21]: a[:,0]-1
Out[21]: array([0, 1, 0, 0, 5, 0])

現在我們只是從b讀取這些行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM