Excel 2013中按唯一标识计算加权平均的方法
如何自动计算品类的加权平均价格
嘿,这个需求太常见了!10000行数据手动算肯定疯掉,用工具自动处理就轻松多了,下面给你两种最实用的方案:
Excel 方案(适合不怎么写代码的同学)
Excel里用SUMPRODUCT和SUMIF的组合就能一键搞定,完全不用手动求和。假设你的数据列是:
- A列:品类标识(chairs、tables、sofa等)
- B列:对应价格
- C列:对应数量
要计算chairs的加权平均价格,直接在空白单元格输入公式:
=SUMPRODUCT((A:A="chairs")*B:B*C:C)/SUMIF(A:A,"chairs",C:C)
公式拆解:
SUMPRODUCT((A:A="chairs")*B:B*C:C):先筛选出所有chairs的行,把每行的价格和数量相乘,再把这些乘积全部加总(也就是chairs的总金额)SUMIF(A:A,"chairs",C:C):统计所有chairs的总数量- 两者相除就是加权平均价格,直接修改公式里的品类名称(比如把"chairs"换成"tables"),就能自动计算其他品类的结果
拿你举的chairs例子验证:
价格$12、$14、$22,数量28、13、5
总金额=1228 +1413 +22*5 = 336+182+110=628
总数量=28+13+5=46
加权平均=628/46≈$13.65
用上面的公式会直接算出这个结果,完全不用手动算。
Python(Pandas)方案(适合大数据量,效率更高)
如果是10000行数据,用Pandas处理速度更快,还能一次性算出所有品类的结果。步骤如下:
- 先导入Pandas库,读取你的数据(假设是CSV格式,列名分别为
item、price、quantity):
import pandas as pd # 读取数据,替换成你的文件路径 df = pd.read_csv("your_data_file.csv")
- 用
groupby按品类分组,然后计算每组的加权平均:
# 计算每个品类的加权平均价格 weighted_average_df = df.groupby('item').apply( lambda group: (group['price'] * group['quantity']).sum() / group['quantity'].sum() ).reset_index(name='weighted_average_price') # 输出结果 print(weighted_average_df)
代码说明:
groupby('item'):把数据按品类标识分成一个个小组lambda group: ...:对每个小组执行计算——先算小组内所有价格×数量的总和,再除以小组的总数量reset_index:把结果整理成清晰的表格格式,列名是item和weighted_average_price
运行后会直接得到所有品类的加权平均价格,比如chairs对应的行就是≈$13.65,tables、sofa的结果也会一起出来,非常高效。
内容的提问来源于stack exchange,提问作者Christol




