擅长:python、mysql、java
<p>给出:</p>
<pre><code>df = pd.DataFrame({'a':[0,1,2,3,0,1,2,3], 'b':[0,1,0,1,1,0,1,0]})
</code></pre>
<p>作为</p>
<pre><code> a b
0 0 0
1 1 1
2 2 0
3 3 1
4 0 1
5 1 0
6 2 1
7 3 0
</code></pre>
<p>创建一个掩码来标识<code>a</code>或<code>b</code>不为零的地方,这些地方可以安全地进行计算。你知道吗</p>
<pre><code>mask = (df['a'] != 0) | (df['b'] != 0)
</code></pre>
<p>面具</p>
<pre><code>0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
</code></pre>
<p>用<code>NaN</code>填充结果列,然后覆盖可以计算的结果:</p>
<pre><code>df['c'] = pd.np.NaN
df.loc[mask, 'c'] = df['a'] / (df['a'] + df['b'])
</code></pre>
<p>结果</p>
<pre><code> a b c
0 0 0 NaN
1 1 1 0.500000
2 2 0 1.000000
3 3 1 0.750000
4 0 1 0.000000
5 1 0 1.000000
6 2 1 0.666667
7 3 0 1.000000
</code></pre>
<p>适用于您的问题:</p>
<pre><code>mask = (df['fruits_ratio'] != 0) | (df['vegetables_ratio'] != 0)
df['new_col'] = pd.np.NaN
df.loc[mask, 'new_col'] = df['fruits_ratio'] / (df['fruits_ratio'] + df['vegetables_ratio'])
</code></pre>