我正在尝试基于一列合并两个数据帧。理想情况下,我希望使用startswitch((,因为它们并不总是完全匹配。
df1:
id symbol
0 123 CCH
1 456 IAC1
2 789 MTCH1
3 987 CVLG
df2
id symbol
0 23434 CCHCP
1 35564 IAC1XP
2 76764 MTCH1
3 87877 CVLGPX
4 98765 CVLGPX
5 13234 CCHCP
和我想要的输出
id symbol matched_id
0 23434 CCHCP 123
1 35564 IAC1XP 456
2 76764 MTCH1 789
3 87877 CVLGPX 987
4 98765 CVLGPXR 987
5 13234 CCH 123
到目前为止,我已经使用
df2 = pd.merge(df2, df1, on='symbol')
这是有效的,但只有当存在完全匹配并且部分失败时。如有任何帮助建议,我们将不胜感激。
您可以尝试:
merged_df = (
df2.assign(
temp=df2.symbol.str.extract(pat=f"({'|'.join(df1.symbol)})"))
.merge(
df1,
how='left',
left_on='temp',
right_on='symbol',
suffixes=['', '_y'])
).rename(columns={'id_y': 'matched_id'}).drop(['temp', 'symbol_y'], 1)
输出:
id symbol matched_id
0 23434 CCHCP 123
1 35564 IAC1XP 456
2 76764 MTCH1 789
3 87877 CVLGPX 987
4 98765 CVLGPX 987
5 13234 CCHCP 123