2017-05-04 119 views
-1

我有兩個numpy數組A和B.A包含dtypes = ['ID','Value','Type'],B包含dtypes = ['ID','值']。比較兩個numpy數組並替換一個值

本質上,我想用'B'中的值替換A中的'Value',但僅用於兩者中的'ID'(因此B中的ID也在A中)。

A = array([[1,2,3,4,5,6,7],[0.785, 0.985, 0.8562, 0.9652, 0.664, 0.962, 0.872],['sio', 'sco', 'sio', 'sco', 'sio', 'sco', 'sio']]) 
B = array([[1,2,3],[0.85,0.4585,0.8436]]) 

A和B的長度是可能在尺寸和因此導致不同的需要來映射值,而不是假定的ID都以相同的順序。

這樣做的最快方法是什麼?

+2

請添加一個示例。 – Divakar

回答

1

希望這有助於我用OrderedDict以防萬一您的數據不僅是有序的整數:

from collections import OrderedDict 

A = [[1,2,3,4,5,6,7],[0.785,0.985,0.8562,0.9652,0.664,0.962,0.872],[' sio', 'sco', 'sio', 'sco', 'sio', 'sco','sio']] 
B = [[1,2,3],[0.85,0.4585,0.8436]] 

a = OrderedDict(zip(*A[:2])) 
b = dict(zip(*B)) 

c = OrderedDict([(k, b[k] if k in b else v) for k, v in a.items()]) 

A = [c.keys(), c.values(), A[2]] 

輸出:

[[1, 2, 3, 4, 5, 6, 7], 
[0.85, 0.4585, 0.8436, 0.9652, 0.664, 0.962, 0.872], 
[' sio', 'sco', 'sio', 'sco', 'sio', 'sco', 'sio']] 
+0

謝謝你的答案是潛在的無序數組所必需的。如果我可以擴展這個問題,如果A中不存在'值'dtype,那麼這將如何工作,並且我想基於'ID'將B的列'值'映射到A(如果不存在,則設置爲0)不存在)? – naiminp

+0

這取得A的值,如果它們存在於B中,則替換它們在相應索引中的值。我添加了用於添加A中不存在的B值的代碼,但是從您的數據中還需要用'sio''和''sco''的第三個數組的信息 – zipa

0

這對你來說足夠快嗎?

import numpy 

A = numpy.array([[1,2,3,4,5,6,7],[0.785,0.985,0.8562,0.9652,0.664,0.962,0.872],[' sio', 'sco', 'sio', 'sco', 'sio', 'sco','sio']]) 
B = numpy.array([[1,2,3],[0.85,0.4585,0.8436]]) 
for i, x in enumerate(A[0]): 
    if x in str(B[0]): 
     A[1,i] = B[1,i] 
print A 

輸出繼電器:

[['1' '2' '3' '4' '5' '6' '7'] 
['0.85' '0.4585' '0.8436' '0.9652' '0.664' '0.962' '0.872'] 
[' sio' 'sco' 'sio' 'sco' 'sio' 'sco' 'sio']]