【发布时间】:2021-01-14 16:23:01
【问题描述】:
考虑以下 DataFrame
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]})
阅读以下帖子后,我知道 apply 适用于整个 Dataframe,而 transform 适用于一系列。
Apply vs transform on a group object
因此,如果我想附加每人在糖果上的总花费,我可以简单地使用以下内容。
candy['Total Spend'] = candy.groupby(['Name'])['Value'].transform(sum)
但如果我需要追加每人的巧克力总花费 - 感觉我别无选择,只能创建一个单独的数据框,然后使用 apply 函数将其合并回来,因为 transform 仅适用于系列。
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'])
虽然我不介意编写上面的代码来解决这个问题。是否可以将应用的结果“转换”回数据帧,而无需创建单独的数据帧并合并它?
使用变换函数时实际发生了什么?是否将单独的系列存储在内存中,然后通过类似于我在应用然后合并方法中所做的索引合并回来?
【问题讨论】:
标签: python pandas dataframe pandas-groupby