<p>您可以使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.split.html" rel="nofollow noreferrer">^{<cd1>}</a>使用regex <code>\W</code>对非单词字符进行拆分,然后通过<a href="https://numpy.org/doc/stable/reference/generated/numpy.intersect1d.html" rel="nofollow noreferrer">^{<cd4>}</a>获得<code>List_to_map</code>的公共元素。最后,使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.join.html" rel="nofollow noreferrer">^{<cd6>}</a>将匹配字符串与<code>+</code>连接起来,如下所示:</p>
<pre><code>import numpy as np
List_to_map = ['JHA', 'LMA', 'STO', 'PQR', 'LKS']
df['Values'] = df['String'].str.split(r'\W').apply(lambda x: np.intersect1d(x, List_to_map)).str.join('+')
</code></pre>
<p>结果:</p>
<pre><code>print(df)
Id String Values
0 1 JHA PQR STO KJAN JHA+PQR+STO
1 2 LKS JHA PLA; NIYM JHA+LKS
2 3 LMA\KHA HYS,KNSN LMA
3 4 JHA, PQR STO KJAM JHA+PQR+STO
4 5 JHA PQR|STO/KJAOP JHA+PQR+STO
</code></pre>
<p>或者,<strong>如果要保持原始字符串的顺序,也可以使用:</p>
<pre><code>df['Values'] = df['String'].str.split(r'\W').apply(lambda x: [y for y in x if y in List_to_map]).str.join('+')
</code></pre>
<p>结果:</p>
<pre><code>print(df)
Id String Values
0 1 JHA PQR STO KJAN JHA+PQR+STO
1 2 LKS JHA PLA; NIYM LKS+JHA
2 3 LMA\KHA HYS,KNSN LMA
3 4 JHA, PQR STO KJAM JHA+PQR+STO
4 5 JHA PQR|STO/KJAOP JHA+PQR+STO
</code></pre>
<p>请注意,使用numpy函数<code>np.intersect1d()</code>比使用Python列表理解更快。但是,匹配列表将基于<code>List_to_map</code>字符串序列。如果字符串concat序列不重要,我建议使用<code>np.intersect1d()</code>以加快执行时间</p>