如何在一个数据框架中合并基于不同列的两个数据框架?



我有两个数据帧:

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

相关内容

  • 没有找到相关文章

最新更新