<p>一个想法:</p>
<pre><code>#list down all the variations of accepted email domains
email_adds = ['@abc.com','@ABC.COM','@Abc.com']
#combine the variations of email addresses in the list
accepted_emails = '|'.join(email_adds)
#columns for test
c = ['sup1_email','sup2_email', 'sup3_email', 'sup4_email']
#reshape and test all values, if `nan` pass `True`
m = df[c].stack(dropna=False).str.contains(accepted_emails, na=True).unstack().all(axis=1)
df = df[~m]
print (df)
personid sup1_email sup2_email sup3_email \
4 65 evan.o@abc.com lenny.t@yahoo.com john.s@abc.com
5 89 dom.q@ABC.com laurie.g@Abc.com topher.u@abc.com
sup4_email
4 sally.j@ABC.com
5 ross.k@qqpower.com
</code></pre>
<p>使用生成器和<code>any</code>的解决方案:</p>
<pre><code>c = ['sup1_email','sup2_email', 'sup3_email', 'sup4_email']
f = lambda y: any(x in y for x in email_adds) if isinstance(y, str) else True
df = df[~df[c].applymap(f).all(axis=1)]
print (df)
personid sup1_email sup2_email sup3_email \
4 65 evan.o@abc.com lenny.t@yahoo.com john.s@abc.com
5 89 dom.q@ABC.com laurie.g@Abc.com topher.u@abc.com
sup4_email
4 sally.j@ABC.com
5 ross.k@qqpower.com
</code></pre>