df1
1 2 3 4
101 1 C 22.6253
101 2 O -32.7148
101 3 N 119.0569
101 4 H 26.8502
101 5 C 126.1352
df2
num1 type name num2 first
101 N VAL 101 N
101 H VAL 101 H
101 CA VAL 101 C
101 HA VAL 101 H
我想合并两者并获取以下输出-DF2中的first
与DF1中的3
匹配:
结果
1 2 3 4 type name
101 1 C 22.6253 NAN NAN
101 2 O -32.7148 NAN NAN
101 3 N 119.0569 N VAL
101 4 H 26.8502 H VAL
101 5 C 126.1352 CA VAL
我正在使用:
merge = df1.merge(df2, left_on='3', right_on='first', how='outer')
成功匹配3和首先是成功的,但它并不是依次执行的,并且仅重复所有其他列中的值。它为什么要这样做,我该如何修复?
1 2 3 4 num1 type name num2 first
101 1 C 22.6253 101 CA VAL 101 C
101 1 C 22.6253 101 CB VAL 101 C
101 1 C 22.6253 101 CG1 VAL 101 C
101 1 C 22.6253 101 CG2 VAL 101 C
101 1 C 22.6253 101 C VAL 101 C
101 1 C 22.6253 102 CA SER 102 C
这是一种方式。我假设您的结果中的第一行不正确。
pd.merge(df1, df2[['type', 'name', 'first']]
.drop_duplicates('first'), how='left', left_on='3', right_on='first')
.drop('first', 1)
结果
1 2 3 4 type name
0 101 1 C 22.6253 CA VAL
1 101 2 O -32.7148 NaN NaN
2 101 3 N 119.0569 N VAL
3 101 4 H 26.8502 H VAL
4 101 5 C 126.1352 CA VAL
说明
- 您需要
left
合并才能维护df1
的结构,并且仅添加df2
的数据。 -
df2
上的drop_duplicates('first')
确保您不会从df2
中的重复序列获得重复的行。请注意,在first
中,每次出现仅保留第一个值。