擅长:python、mysql、java
<p>另一种方法:</p>
<pre><code>df = pd.DataFrame({'X_1' : ['IEZ', 'PXJ', 'ABC', 'XOP'],
'X_2' : ['XOP', 'ABC', 'RYE', 'IEZ'],
'X_3' : ['ABC', 'XES','PXE', 'ABC'],
'W_1' : [0.42, 0.47, 0.23, 0.62],
'W_2' : [0.18, 0.12, 0.33, 0.20],
'W_3' : [0.40, 0.41, 0.44, 0.18]})
</code></pre>
<p>首先,取数字列:</p>
<pre><code>num_columns = df.loc[:,'W_1':'W_3']
</code></pre>
<p>接下来,使用<code>X_1</code>->;<code>X_3</code>列生成布尔掩码:</p>
<pre><code>df_mask = (df.loc[:,'X_1':'X_3']=='ABC').values
</code></pre>
<p>最后,使用DataFrame mask方法,当单元为真时返回NaNs,当掩码为假时返回单元值。然后,我们将对结果行求和,并将其分配给原始数据帧:</p>
<pre><code>df['W'] = num_columns.mask(~df_mask).sum(axis=1)
</code></pre>
<p>当然,这可以组合成一行:</p>
<pre><code>df['W'] = (df.loc[:,'W_1':'W_3']
.mask(~(df.loc[:,'X_1':'X_3']=='ABC').values)
.sum(axis=1))
</code></pre>
<p><strong>编辑:</strong></p>
<p>当然,这只在每行只有一个<code>'ABC'</code>实例的情况下才有效-您可能需要对此进行检查。你知道吗</p>