<p>在<code>df2.Account</code>上尝试<code>str.extract</code>,并将结果设置为<code>df2</code>和<code>join</code>的索引</p>
<pre><code>pat1 = '('+'|'.join(df1.Account)+')'
s = df2.Account.str.extract(pat1, expand=False)
df2.set_index(s).join(df1.set_index('Account')).reset_index(drop=True)
Out[644]:
Account Col_B Col_C ID Name
0 B36363-0 text_b1 text_c1 2019001 John
1 01_G47281 text_b2 text_c2 2019002;2018101 Alice;Emma
2 II_G47281 text_b4 text_C4 2019002;2018101 Alice;Emma
3 X_H46291 text_b3 text_c3 2019001 John
</code></pre>
<hr/>
<p>另一种方法是使用<code>merge</code></p>
<pre><code>df2.assign(Account2=df2.Account.str.extract(pat1, expand=False)) \
.merge(df1, left_on='Account2', right_on='Account', suffixes=('', 'y')) \
.drop(['Account2', 'Accounty'], 1)
Out[645]:
Account Col_B Col_C ID Name
0 B36363-0 text_b1 text_c1 2019001 John
1 01_G47281 text_b2 text_c2 2019002;2018101 Alice;Emma
2 II_G47281 text_b4 text_C4 2019002;2018101 Alice;Emma
3 X_H46291 text_b3 text_c3 2019001 John
</code></pre>