擅长:python、mysql、java
<p>如果资历级别始终从前面开始,则直接执行<code>merge</code>可以避免一些麻烦:</p>
<pre><code>print (pd.merge(df, df2,
left_on=df["position"].str.split().str[0].str.lower(),
right_on=df2["role_position"].str.strip("%")).drop("key_0", axis=1))
</code></pre>
<p>否则,您可以在<code>merge</code>期间执行<code>pd.Series.str.extract</code>:</p>
<pre><code>pat = f'({"|".join(df2["role_position"].str.strip("%"))})'
print (pd.merge(df, df2,
left_on=df["position"].str.extract(pat, flags=re.IGNORECASE, expand=False).str.lower(),
right_on=df2["role_position"].str.strip("%")).drop("key_0", axis=1))
</code></pre>
<p>两者产生相同的结果:</p>
<pre><code> user_id position role_id role_position
0 201 Senior Engineer 10 %senior%
1 207 Senior System Architect 10 %senior%
2 223 Senior account manage 10 %senior%
3 212 Junior Manager 20 %junior%
4 112 junior Engineer 20 %junior%
5 311 junior python developer 20 %junior%
</code></pre>