擅长:python、mysql、java
<p>所以你的数据<em>确实</em>包含带有nan的数字数据,所以这就足够了-</p>
<h3><code>pd.Series.mask</code>/<code>where</code></h3>
<pre><code>df['SKU_CB'] = df.SKU.where(df.ClosingBalance.gt(0))
</code></pre>
<p>或者</p>
<pre><code>df['SKU_CB'] = df.SKU.mask(~df.ClosingBalance.gt(0))
</code></pre>
<p/>
<pre><code>df
SKU ClosingBalance SKU_CB
0 S1 10.0 S1
1 S2 NaN NaN
2 S3 0.0 NaN
3 S4 20.0 S4
</code></pre>
<hr/>
<p>如果碰巧,您的数据有不完全是NaN的NaN值,那么这里有一个替代方法。使用<code>pd.to_numeric</code>,确定哪些值无效,并使用该值屏蔽<code>SKU</code></p>
<h3><code>pd.to_numeric</code>与<code>pd.Series.mask</code>/<code>where</code></h3>
<pre><code>df['SKU_CB'] = df.SKU.mask(
~pd.to_numeric(df.ClosingBalance, errors='coerce').gt(0)
)
</code></pre>
<p>或者</p>
<pre><code>df['SKU_CB'] = df.SKU.where(
pd.to_numeric(df.ClosingBalance, errors='coerce').gt(0)
)
</code></pre>
<p/>
<pre><code>df
SKU ClosingBalance SKU_CB
0 S1 10 S1
1 S2 np.nan NaN
2 S3 0 NaN
3 S4 20 S4
</code></pre>