使用Pandas无需调用自定义函数为同条目新增平均价格列的方法
完全可以不用自定义函数实现,推荐使用pandas原生的向量化运算实现,性能远高于逐行apply的方案。
方案1:直接对汇总后的列做向量运算
这是最符合需求的方案,全程不需要自定义任何函数,直接替换你原来的自定义函数和apply代码即可,逻辑和你原有代码完全一致:
import pandas as pd df = pd.DataFrame( { 'Fruits': ['Apple', 'Apple', 'Apple', 'Orange', 'Banana', 'Orange'], 'Price': [100, 300, 250, 300, 80, 150], 'Amount': [ 2, 5, 5, 10, 10, 8] } ) # 按水果分组汇总 df1 = df.groupby(['Fruits'],as_index=False).sum() # 直接对两列做向量除法,无需自定义函数和逐行遍历 df1['Average'] = df1['Price'] / df1['Amount'] print(df1)
pandas的Series之间的运算默认是逐元素对齐执行的,不需要显式遍历每一行,不仅代码更简洁,处理大批量数据时的效率也比axis=1的apply操作高几个数量级。
方案2:分组聚合时直接一步生成结果
如果你不需要单独保留总售价、总销量的中间字段,也可以在分组聚合阶段直接计算出平均价:
df1 = df.groupby('Fruits', as_index=False).agg( Total_Price=('Price', 'sum'), Total_Amount=('Amount', 'sum'), Average=('Price', lambda x: x.sum() / df.loc[x.index, 'Amount'].sum()) )
内容的提问来源于stack exchange,提问作者hbaromega
相关产品推荐
相关产品推荐

