回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有熊猫数据帧。在这个数据框中,我想修改一些行的几列。这些都是我尝试过的方法。在</p>
<pre><code>df[['finalA', 'finalB']] = df[['A', 'B']]
exceptions = df.loc[df.normal == False]
</code></pre>
<p>就像一个咒语,但现在我想设置例外:</p>
^{pr2}$
<p>这不管用。所以我试着从<a href="https://stackoverflow.com/a/12307162/4800086">this answer</a>使用<code>.ix</code>。在</p>
<pre><code>df.ix[exceptions.index, ['finalA', 'finalB']] = \
df.ix[exceptions.index, ['A_except', 'B_except']]
</code></pre>
<p>这也不管用。对于异常行,这两种方法都在<code>finalA</code>和{<cd4>}中给我<code>NaN</code>。在</p>
<p>唯一可行的方法就是一次只写一个专栏:</p>
<pre><code>df.ix[exceptions.index, 'finalA'] = \
df.ix[exceptions.index, 'A_except']
df.ix[exceptions.index, 'finalB'] = \
df.ix[exceptions.index, 'B_except']
</code></pre>
<p>熊猫这里怎么了?如何避免为显然是通过选择多个列生成的副本设置值?有没有办法避免这种代码重复?在</p>
<p>还有一些思考:它实际上并没有将值设置为dataframe的副本,而是将值设置为NaN。它实际上会将它们重写为一个新值。在</p>
<p/><hr/>
示例数据帧:
<pre><code>import pandas as pd
df = pd.DataFrame({'A': [1,2,3,4],
'B': [5,6,7,8],
'normal': [True, True, False, False],
'A_except': [0,0,9,9],
'B_except': [0,0,10,10]})
</code></pre>
<p>结果:</p>
<pre><code> A A_except B B_except normal finalA finalB
0 1 0 5 0 True 1.0 5.0
1 2 0 6 0 True 2.0 6.0
2 3 9 7 10 False NaN NaN
3 4 9 8 10 False NaN NaN
</code></pre>
<p>预期结果:</p>
<pre><code> A A_except B B_except normal finalA finalB
0 1 0 5 0 True 1 5
1 2 0 6 0 True 2 6
2 3 9 7 10 False 9 10
3 4 9 8 10 False 9 10
</code></pre>