<p>首先将字符串<code>NA</code>替换为缺少的值,然后将<code>sum</code>聚合为<code>Series</code>。然后对新列使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html" rel="nofollow noreferrer">^{<cd4>}</a>,其中不匹配的值缺少值,因此用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.fillna.html" rel="nofollow noreferrer">^{<cd6>}</a>替换<code>NaN</code>s,并映射另一列,最后将两列中不匹配的值替换为<code>0</code>:</p>
<pre><code>df = df.replace('NA', np.nan)
s = df.groupby('month1')['amount'].sum()
df['sum_amount'] = df['month1'].map(s).fillna(df['month2'].map(s)).fillna(0).astype(int)
print (df)
month1 month2 amount sum_amount
0 1.0 NaN 10 60
1 2.0 5.0 20 20
2 NaN 1.0 40 60
3 1.0 2.0 50 60
4 4.0 NaN 60 60
5 NaN 1.0 70 60
6 NaN 3.0 100 0
</code></pre>
<p>对于第二种情况,请在同一解决方案中更改列名:</p>
<pre><code>df = df.replace('NA', np.nan)
s = df.groupby('month2')['amount'].sum()
df['sum_amount'] = df['month1'].map(s).fillna(df['month2'].map(s)).fillna(0).astype(int)
print (df)
month1 month2 amount sum_amount
0 1.0 NaN 10 110
1 2.0 5.0 20 50
2 NaN 1.0 40 110
3 1.0 2.0 50 110
4 4.0 NaN 60 0
5 NaN 1.0 70 110
6 NaN 3.0 100 100
</code></pre>