我有两个数据帧:
df1 = pd.DataFrame({'id1':[3,2,1,4,5],'id2':[8,7,6,9,10]})
df2 = pd.DataFrame({'id3':[6,2,8,5,4],'Name':['a','b','c','e','d']})
df1
id1 id2
3 8
2 7
1 6
4 9
5 10
df2
id3 Name
6 a
2 b
8 c
5 e
4 d
描述df1由2列(id1和id2)组成,表示两列的唯一值。
df2由2列(id3和name)组成,它们也表示唯一值。
id3df2的列由来自df1行的任意一个值组成,其顺序也是随机的。示例-让我们取id3列的第一个值6。它是通过在df1的第三行中随机选择一个值来实现的。类似地,2是从df1的第二行随机抽取值得到的。等等…
现在我想根据id3列的可用性,通过df2的id3和df1的id1或id2合并这两个数据帧。因此,最终的数据帧看起来像这样:
id1 id2 id3 Name
3 8 8 c
2 7 2 b
1 6 6 a
4 9 4 d
5 10 5 e
有谁能帮我一下吗?您可以合并2次:首先在id1/id3上,然后在id2/id3上,然后连接2个数据帧:
我想恢复df1在我们数据框中的值的顺序。
out = pd.concat([df1.reset_index().merge(df2, left_on='id1', right_on='id3'),
df1.reset_index().merge(df2, left_on='id2', right_on='id3')])
.sort_values('index').drop(columns='index').reset_index(drop=True)
输出:
>>> out
id1 id2 id3 Name
0 1 6 6 a
1 2 7 2 b
2 3 8 8 c
3 4 9 4 d
4 5 10 5 e