如何根据一个数据框中的不同列合并两个数据框?
How to merge two dataframes based on different columns in one dataframe?
我有两个数据框:
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 和名称)组成,它们也表示唯一值。
id3 df2 的列由 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 个数据帧:
更新
I want to restore the order of values of df1 in out dataframe as well.
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
我有两个数据框:
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 和名称)组成,它们也表示唯一值。
id3 df2 的列由 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 个数据帧:
更新
I want to restore the order of values of df1 in out dataframe as well.
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