<p>无法判断您是否需要聚合数(在这种情况下,Andy的解决方案就是您想要的),还是希望将其转换回原始数据帧。如果是后者,可以使用<code>transform</code></p>
<pre><code>In [33]: cols = ['PetalLength', 'PetalWidth']
In [34]: transformed = grouped_iris[cols].transform(sum).sum(axis=1)
In [35]: iris['SumLengthWidth'] = transformed
In [36]: iris.head()
Out[36]:
SepalLength SepalWidth PetalLength PetalWidth Name SumLengthWidth
0 5.1 3.5 1.4 0.2 Iris-setosa 85.4
1 4.9 3.0 1.4 0.2 Iris-setosa 85.4
2 4.7 3.2 1.3 0.2 Iris-setosa 85.4
3 4.6 3.1 1.5 0.2 Iris-setosa 85.4
4 5.0 3.6 1.4 0.2 Iris-setosa 85.4
</code></pre>
<p><strong>编辑</strong>:一般案例示例</p>
<p>通常,对于一个数据帧<code>df</code>,用<code>sum</code>聚合groupby将得到每个组的总和</p>
^{pr2}$
<p>在您的例子中,您有兴趣对这些行进行汇总:</p>
<pre><code>In [50]: grouped.agg(sum).sum(axis=1)
Out[50]:
Name
bar 39
foo 50
</code></pre>
<p>但这只给你2个数字,每组1个。一般来说,如果您希望将这两个数字投影回原始</em>数据帧上,则需要使用<code>transform</code>:</p>
<pre><code>In [51]: grouped.transform(sum)
Out[51]:
val1 val2
0 28 22
1 31 8
2 28 22
3 31 8
4 28 22
5 31 8
</code></pre>
<p>请注意,这些值是如何与<code>agg</code>,<em>生成的值完全相同,但是</em>的维度与原始的<code>df</code>相同。还要注意每隔一个值是如何重复的,因为行[0,2,4]和[1,3,5]是相同的组。在您的例子中,您需要这两个值的和,所以您需要跨行求和。在</p>
<pre><code>In [52]: grouped.transform(sum).sum(axis=1)
Out[52]:
0 50
1 39
2 50
3 39
4 50
5 39
</code></pre>
<p>现在有了一个与原始数据帧长度相同的序列,因此可以将其重新指定为列(或对其执行您喜欢的操作):</p>
<pre><code>In [53]: df['val1 + val2 by Name'] = grouped.transform(sum).sum(axis=1)
In [54]: df
Out[54]:
Name val1 val2 val1 + val2 by Name
0 foo 6 3 50
1 bar 17 4 39
2 foo 16 6 50
3 bar 7 3 39
4 foo 6 13 50
5 bar 7 1 39
</code></pre>