我有一个带有多个值的 B 列的输入数据框: df1
A B C D E
0 a1 b1 c1 d3 e1
1 a1 b2,b3 c2 d4 e2
2 a2 b3 c3 d5 e3
3 a2 b2 c8 d6 e1
4 a2 b4,b1,b5 c4 d7 e2
5 a3 b4 c5 d3 e4
6 a4 b5 c6 d1 e5
7 a4 b6, b2 c1 d2 e1
8 a5 b6 c2 d7 e2
我希望将 df1 中 C 列和 D 列的数据添加到另一个数据框。在这个 B 列中,每行只有 1 个值。 df2
A B
0 a1 b1
1 a4 b6
2 a2 b1
3 a4 b2
我想要一个输出数据框,它检查 df1 中的行,该行在 df2 中同时具有 A 和 B 的值,并从 df1 中的该行添加 C 和 D 的值。 所需的输出:
A B C D
0 a1 b1 c1 d3
1 a4 b6 c1 d2
2 a2 b1 c4 d7
3 a4 b2 c1 d2
我面临的挑战是 df1 的 B 列中的多个值,并检查 df1 中的 2 列以在 df2 中添加 C 和 D。我该怎么做?
答案 0 :(得分:0)
您首先需要分解 B 列,例如您在单个单元格中有一个值而不是逗号分隔的值。使用str.split
和explode
列B 进行操作。然后merge
。
res = (
df2.merge(df1.assign(B=lambda x: x['B'].str.split(','))
.explode('B')
[['A','B','C','D']],
on=['A','B'], how='left')
)
print(res)
A B C D
0 a1 b1 c1 d3
1 a4 b6 c1 d2
2 a2 b1 c4 d7
3 a4 b2 c1 d2