根据第一个匹配合并两个DF



具有以下DF:

Data frame A
A   B
0   a   x
1   b   y
2   c   z
Data frame B
X   Y   V
0   a   x   v1
1   b   y   v2
2   c   o   v3
3   a   x   v4

我试着在[A,B]&[X,Y]以获得以下结果,其中第一个匹配被保存,另一个被忽略,NaN值表示不匹配。

A   B   X   Y   V
0   a   x   a   x   v1  <-- first match of 'a','x'
1   b   y   b   y   v2
2   c   z   NaN NaN NaN <-- no match for c,z

从上面的例子来看,DF B中被忽略的行是:

3   a   x   v4

然而,我的代码,

a = pd.DataFrame({"A":['a','b','c'], "B":['x','y','z']})
b = pd.DataFrame({"X":['a','b','c','a'], "Y":['x','y','o','x'], "V":['v1','v2','v3','v4']})
pd.merge(a,b,left_on=['A','B'], right_on=['X','Y'])

输出以下内容:

A   B   X   Y   V
0   a   x   a   x   v1
1   a   x   a   x   v4
2   b   y   b   y   v2

我需要更改什么?

尝试将合并"how"更改为"left"(默认为内部(,然后在A&B.

result = pd.merge(a,b,left_on=['A','B'], right_on=['X','Y'], how='left')
result = result.drop_duplicates(subset=['A','B'])

生成以下

A  B    X    Y    V
0  a  x    a    x   v1
2  b  y    b    y   v2
3  c  z  NaN  NaN  NaN

最新更新