<h3><a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html" rel="nofollow noreferrer"><strong>^{<cd1>}</strong></a></h3>
<p>直列</p>
<pre><code>cols = ['preTestScore', 'postTestScore']
df.assign(**df[cols].mask(df[cols[0]].eq(-999)))
first_name last_name age preTestScore postTestScore
0 Jason Miller 42 NaN NaN
1 Molly Jacobson 52 NaN NaN
2 Tina Ali 36 NaN NaN
3 Jake Milner 24 2.0 2.0
4 Amy Cooze 73 1.0 -999.0
</code></pre>
<hr/>
<h3>说明</h3>
<ul>
<li><p>我使用<code>cols</code>来避免写长列名。<code>cols[0]</code>是写<code>'preTestScore'</code></p></li>
<li><p>当<code>preTestScore</code>为<code>-999</code>时,<code>df[cols].mask(df[cols[0]].eq(-999))</code>将使两列<code>np.nan</code>。</p></li>
<li><p>我使用<code>assign</code>生成包含新列的数据帧,而不覆盖旧的数据帧。如果要持久化此新数据帧,请将结果指定给一个名称。您甚至可以使用旧名称<code>df = df.assign(**df[cols].mask(df[cols[0]].eq(-999)))</code></p></li>
<li><p><code>assign</code>获取关键字参数,您可以通过使用双splat <code>**kwargs</code>解包字典来传递这些参数。方便的是,当在字典上下文中使用数据帧时,它以列名作为关键字,以列作为值进行解包,这完全符合我们的需要。</p></li>
</ul>
<hr/>
<h3>就地</h3>
<pre><code>cols = ['preTestScore', 'postTestScore']
df[cols] = df[cols].mask(df[cols[0]].eq(-999))
df
first_name last_name age preTestScore postTestScore
0 Jason Miller 42 NaN NaN
1 Molly Jacobson 52 NaN NaN
2 Tina Ali 36 NaN NaN
3 Jake Milner 24 2.0 2.0
4 Amy Cooze 73 1.0 -999.0
</code></pre>