擅长:python、mysql、java
<p>与其使用<code>.str.contains</code>,不如使用<code>.str.extractall</code>精确地获取与列表中的项目匹配的子字符串。然后使用<code>.isin</code>(或<code>set</code>逻辑)检查列表中的哪些元素与至少一个内容匹配</p>
<pre><code>pat = '(' + '|'.join(search_list) + ')'
#'(kpc2021|kpc8291|kpc8471|kpc8472|kpc1165)'
result = pd.DataFrame({'item': search_list})
result['in_df'] = result['item'].isin(df['Server Name'].str.extractall(pat)[0])
</code></pre>
<hr/>
<pre><code>print(result)
item in_df
0 kpc2021 True
1 kpc8291 True
2 kpc8471 True
3 kpc8472 False
4 kpc1165 False
</code></pre>
<hr/>
<p>使用<code>.str.extractall</code>我们得到一系列匹配的子字符串。有一个多索引,外部级别是原始数据帧索引,内部级别是它在该行上匹配的项数的计数器(.extractall可以有多个匹配项)</p>
<pre><code>df['Server Name'].str.extractall(pat)[0]
# match
#0 0 kpc2021
#1 0 kpc8291
#2 0 kpc8471
#Name: 0, dtype: object
</code></pre>