2017-06-01 14 views

回答

0

基本上,您使用existingcol的值作爲列索引,並遍歷2D數組的每一行,以便從2D陣列中選擇每行一個元素。因此,我們可以用NumPy's integer array indexing達到預期的新列 -

col_idx = df.existingcol.values 
df['newcol'] = dim2_arr[np.arange(len(dim2_arr)), col_idx] 

採樣運行 -

1)輸入:

In [311]: df 
Out[311]: 
    existingcol 
0   2 
1   0 
2   0 
3   1 
4   0 
5   2 
6   1 
7   4 
8   3 
9   3 

In [313]: dim2_arr 
Out[313]: 
array([[25, 75, 70, 45, 67], 
     [21, 85, 74, 68, 61], 
     [79, 33, 22, 77, 25], 
     [69, 31, 67, 11, 45], 
     [50, 12, 35, 55, 89], 
     [62, 59, 86, 55, 58], 
     [67, 41, 77, 88, 79], 
     [64, 30, 36, 25, 21], 
     [24, 73, 68, 84, 79], 
     [50, 53, 55, 71, 84]]) 

2)使用建議代碼:

In [314]: col_idx = df.existingcol.values 

In [317]: df['newcol'] = dim2_arr[np.arange(len(dim2_arr)), col_idx] 

In [318]: df 
Out[318]: 
    existingcol newcol 
0   2  70 
1   0  21 
2   0  79 
3   1  31 
4   0  50 
5   2  86 
6   1  41 
7   4  21 
8   3  84 
9   3  71 
+1

夢幻般的答案Divakar。這工作完美!非常感謝! –

+0

@DeanaH。如果這解決了您的問題,請考慮通過點擊解決方案旁邊的空白勾來接受它,更多信息在這裏 - https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Divakar