如何在使用一列的子字符串的基础上合并两个数据帧



我正在尝试基于一列合并两个数据帧。理想情况下,我希望使用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

最新更新