我想做类似这样的事情,其中df.index完全匹配2dim_arr
df['newcol']=2dim_arr[df.index][df.existingcol.values]
如果我这样做,我可以得到我想要的值:
for i in range(len(df)):
print(2dim_arr[i][df.iloc[i].existingcol])
提前感谢您的帮助。
答案 0 :(得分: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