回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>举个例子:</p>
<pre><code>from pandas import DataFrame, isna
from numpy import nan
df = DataFrame([
{'id': '1', 'x': 2, 'y': 3, 'z': 4},
{'id': '5', 'x': 6, 'y': 7, 'z': 8},
{'id': '9', 'x': 10, 'y': 11, 'z': 12}
]).set_index('id')
factors = DataFrame([
{'id': '5', 'x': nan, 'z': 3},
{'id': '9', 'x': 0.2, 'z': nan},
]).set_index('id')
for row_id in factors.index:
for col in factors.columns:
if not isna(factors[col][row_id]):
df[col][row_id] *= factors[col][row_id]
</code></pre>
<p>如果<code>df</code>中的值与<code>factors</code>中的非NaN值相乘,是否有更干净的方法来处理<code>pandas</code>?(或者<code>numpy</code>关于这个问题)我看了一下<code>.mul()</code>,但这似乎不允许我做这里需要做的事情</p>
<p>此外,如果factors包含不在<code>df</code>中的<code>id</code>行,例如:</p>
<pre><code>factors = DataFrame([
{'id': '5', 'x': nan, 'z': 3},
{'id': '13', 'x': 2, 'z': 4},
]).set_index('id')
</code></pre>