如何将2维数组中的值复制到pandas dataframe中的新列中

时间:2017-06-01 14:18:12

标签: arrays pandas numpy dataframe copy

我想做类似这样的事情,其中​​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])

提前感谢您的帮助。

1 个答案:

答案 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