[英]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
您可能希望將其定義為float
或float32
(因為您嘗試插入的值是浮點數):
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.