Pandas:根据索引值插入列

时间:2015-05-07 11:13:15

标签: python numpy pandas

我有以下示例数据

In [1]: table[['id', 'age']]
Out[1]: 
   id  age
0   1   12
1   2   13
2   3   14
3   4   15
4   5   16
5   6   17
6   7   18
7   8  NaN
8   9   20

发布以下np.array

In [2]: data
Out[2]: 
array([[  1.,   3.,  21.],
       [  2.,   4.,  21.],
       [  3.,   5.,  22.],
       [  4.,   5.,  22.],
       [  5.,   4.,   2.]])

并希望根据datatable连接到id

例如,结果应如下所示:

id  age
0   1   12  3     21
1   2   13  4     21 
2   3   14  5     22
3   4   15  5     22
4   5   16  4     2
5   6   17  
6   7   18  
7   8  NaN  
8   9   20  

我可以循环遍历zip(table,data)并逐行工作,但我认为可以用更简洁的简洁方式完成

1 个答案:

答案 0 :(得分:1)

我根据您的文字所需结果而不是您的发布结果df发布此答案,如果您真正想要的话,我可以轻松编辑。

首先从np数组构建一个df然后再merge。我们将左侧合并为“id”'并且在列的右侧' 0'并执行外部合并,我们必须放弃' 0' 0专栏,因为它对我们想要的东西是多余的:

In [261]:

data = np.array([[  1.,   3.,  21.],
       [  2.,   4.,  21.],
       [  3.,   5.,  22.],
       [  4.,   5.,  22.],
       [  5.,   4.,   2.]])
data
Out[261]:
array([[  1.,   3.,  21.],
       [  2.,   4.,  21.],
       [  3.,   5.,  22.],
       [  4.,   5.,  22.],
       [  5.,   4.,   2.]])
In [265]:

data_df = pd.DataFrame(data)
data_df
Out[265]:
   0  1   2
0  1  3  21
1  2  4  21
2  3  5  22
3  4  5  22
4  5  4   2
In [268]:

df.merge(data_df, left_on='id', right_on=0, how='outer').drop(0, axis=1)
Out[268]:
   id  age   1   2
0   1   12   3  21
1   2   13   4  21
2   3   14   5  22
3   4   15   5  22
4   5   16   4   2
5   6   17 NaN NaN
6   7   18 NaN NaN
7   8  NaN NaN NaN
8   9   20 NaN NaN