<p>首先使用<code>regex</code>按列<code>df1['Brand']</code>提取列,然后使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mask.html" rel="nofollow noreferrer">^{<cd3>}</a>按掩码设置值,使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.where.html" rel="nofollow noreferrer">^{<cd4>}</a>设置缺失值:</p>
<pre><code>v = df.columns.str.extract('(' + '|'.join(df1['Brand']) + ')', expand=False)
print (v)
Index(['Audi', 'BMW', 'VW'], dtype='object')
</code></pre>
<hr/>
<pre><code>m = df.eq('Selected')
print (m)
Q14r63: Audi Q14r2: BMW Q14r1: VW
0 True False False
1 False True True
2 True True False
</code></pre>
<hr/>
<pre><code>df = df.mask(m, v[None, :]).where(m)
print (df)
Q14r63: Audi Q14r2: BMW Q14r1: VW
0 Audi NaN NaN
1 NaN BMW VW
2 Audi BMW NaN
</code></pre>
<p>使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="nofollow noreferrer">^{<cd5>}</a>和<code>DataFrame</code>构造函数的替代解决方案:</p>
<pre><code>df = pd.DataFrame(np.where(m, v, np.nan), index=df.index, columns=df.columns)
print (df)
Q14r63: Audi Q14r2: BMW Q14r1: VW
0 Audi NaN NaN
1 NaN BMW VW
2 Audi BMW NaN
</code></pre>