擅长:python、mysql、java
<h3>您可以通过以下步骤接近:</h3>
<ol>
<li><p>您可以在每个列/元素上使用<code>pd.Series.explode()</code>将字符串列表展开为多行,每行仅包含字符串(所有列表都已展开/分解为行)</p>
</li>
<li><p>然后使用<code>.isin()</code>检查数据帧中<code>to_delete</code>列表中的字符串</p>
</li>
<li><p>按索引级别0分组(在分解之前包含原始行索引),将多行匹配结果聚合并汇总回一行(使用<code>groupby()</code>下的<code>.sum()</code>)</p>
</li>
<li><p>然后<code>.sum(axis=1)</code>按行检查要删除的任何匹配字符串</p>
</li>
<li><p>检查0匹配的行(要保留的行)并形成结果行的布尔索引</p>
</li>
<li><p>最后,使用<code>.loc</code>过滤不匹配的行以保留</p>
</li>
</ol>
<hr/>
<pre><code>df.loc[df.apply(pd.Series.explode).isin(to_delete).groupby(level=0).sum().sum(axis=1).eq(0)]
</code></pre>
<p><strong>结果:</strong></p>
<pre><code> A B C D E
1 string2 string5 [string8] [string13] [string16]
</code></pre>
<hr/>
<p>可根据以下代码构建原始数据帧以进行测试:</p>
<pre><code>data = {'A': ['string1', 'string2', 'string3'],
'B': ['string4', 'string5', 'string6'],
'C': [['string7', 'string10'], ['string8'], ['string9']],
'D': [['string11', 'string 12'], ['string13'], ['string14']],
'E': [['string15'], ['string16'], ['string17']]}
df = pd.DataFrame(data)
</code></pre>