我有以下示例数据
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.]])
并希望根据data
将table
连接到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)
并逐行工作,但我认为可以用更简洁的简洁方式完成
答案 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