<p>使用我的<a href="https://stackoverflow.com/a/56315491/9081267">^{<cd1>}</a>函数:</p>
<pre><code>from fuzzywuzzy import fuzz
from fuzzywuzzy import process
df3 = fuzzy_merge(df2, df1, 'Account', 'Account', threshold=80)\
.merge(df1, left_on='matches', right_on='Account', suffixes=['', '_2'])\
.drop(columns=['matches', 'Account_2'])
</code></pre>
<p><strong>输出</strong></p>
<pre><code> 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>Fuzzy_merge</code>函数:</p>
<pre><code>def fuzzy_merge(df_1, df_2, key1, key2, threshold=90, limit=2):
"""
df_1 is the left table to join
df_2 is the right table to join
key1 is the key column of the left table
key2 is the key column of the right table
threshold is how close the matches should be to return a match
limit is the amount of matches will get returned, these are sorted high to low
"""
s = df_2[key2].tolist()
m = df_1[key1].apply(lambda x: process.extract(x, s, limit=limit))
df_1['matches'] = m
m2 = df_1['matches'].apply(lambda x: ', '.join([i[0] for i in x if i[1] >= threshold]))
df_1['matches'] = m2
return df_1
</code></pre>