回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<P>考虑下面的数据文件</p>
<pre><code>candy = pd.DataFrame({'Name':['Bob','Bob','Bob','Annie','Annie','Annie','Daniel','Daniel','Daniel'], 'Candy': ['Chocolate', 'Chocolate', 'Lollies','Chocolate', 'Chocolate', 'Lollies','Chocolate', 'Chocolate', 'Lollies'], 'Value':[15,15,10,25,30,12,40,40,16]})
</code></pre>
<p>在阅读了下面的文章之后,我意识到apply可以在整个数据帧上工作,transform可以在一个系列上工作</p>
<p><a href="https://stackoverflow.com/questions/27517425/apply-vs-transform-on-a-group-object">Apply vs transform on a group object</a></p>
<p>因此,如果我想增加每人在糖果上的总花费,我可以简单地使用以下方法</p>
<pre><code>candy['Total Spend'] = candy.groupby(['Name'])['Value'].transform(sum)
</code></pre>
<p>但是,如果我需要追加每人总共$chocolate的花费,我感觉我别无选择,只能创建一个单独的数据帧,然后使用apply函数将其合并回来,因为transform只对一个系列有效</p>
<pre><code>chocolate = candy.groupby(['Name']).apply(lambda x: x[x['Candy'] == 'Chocolate']['Value'].sum()).reset_index(name = 'Total_Chocolate_Spend')
candy = pd.merge(candy, chocolate, how = 'left',left_on=['Name'], right_on=['Name'])
</code></pre>
<p>虽然我不介意写上面的代码来解决这个问题。是否可以将应用的结果“转换”回数据帧,而不必创建单独的数据帧并合并它</p>
<p>使用transform函数时实际发生了什么?一个单独的序列存储在内存中,然后通过索引合并回来,这与我在apply-then-merged方法中所做的类似吗</p>