使用Pandas实现加权平均计算:pbpython项目实战解析
引言
在数据分析领域,加权平均是一种比简单算术平均更精确的计算方法,它考虑了不同数据点的重要性差异。本文将通过pbpython项目中的销售数据分析案例,详细介绍如何使用Pandas实现加权平均计算,并展示如何将其应用于实际业务场景。
加权平均基础概念
加权平均(Weighted Average)是一种考虑每个数据点权重的平均值计算方法。其公式为:
加权平均 = Σ(值 × 权重) / Σ(权重)
与简单算术平均相比,加权平均能更准确地反映数据的真实情况,特别是在不同数据点具有不同重要性时。
数据准备
首先我们导入必要的库并加载示例销售数据:
import pandas as pd
import numpy as np
# 加载销售数据
sales = pd.read_excel("sales-estimate.xlsx", sheet_name="projections")
数据集包含以下列:
- Account: 客户账号
- Name: 客户名称
- State: 所在州
- Rep: 销售代表
- Manager: 销售经理
- Current_Price: 当前产品价格
- Quantity: 销售数量
- New_Product_Price: 新产品价格
简单平均 vs 加权平均
计算简单平均
print("当前价格简单平均:", sales["Current_Price"].mean())
print("新产品价格简单平均:", sales["New_Product_Price"].mean())
简单平均将所有数据点同等对待,不考虑销售数量的差异。
计算加权平均
# 长格式计算加权平均
current_weighted = (sales["Current_Price"] * sales["Quantity"]).sum() / sales["Quantity"].sum()
new_weighted = (sales["New_Product_Price"] * sales["Quantity"]).sum() / sales["Quantity"].sum()
print("当前价格加权平均:", current_weighted)
print("新产品价格加权平均:", new_weighted)
加权平均考虑了销售数量的影响,结果与简单平均有明显差异。
使用NumPy简化计算
Pandas可以与NumPy配合使用,简化加权平均计算:
print("当前价格加权平均(NumPy):", np.average(sales["Current_Price"], weights=sales["Quantity"]))
print("新产品价格加权平均(NumPy):", np.average(sales["New_Product_Price"], weights=sales["Quantity"]))
创建自定义加权平均函数
为了更灵活地应用加权平均,我们可以创建一个自定义函数:
def weighted_average(group, avg_name, weight_name):
"""
计算加权平均的自定义函数
:param group: 分组数据
:param avg_name: 需要计算平均的列名
:param weight_name: 权重列名
:return: 加权平均值
"""
values = group[avg_name]
weights = group[weight_name]
try:
return (values * weights).sum() / weights.sum()
except ZeroDivisionError:
return values.mean() # 如果没有权重,返回简单平均
这个函数具有错误处理机制,当权重总和为零时会返回简单平均。
应用加权平均函数
整体数据应用
print("当前价格加权平均:", weighted_average(sales, "Current_Price", "Quantity"))
print("新产品价格加权平均:", weighted_average(sales, "New_Product_Price", "Quantity"))
按经理分组计算
manager_current = sales.groupby("Manager").apply(weighted_average, "Current_Price", "Quantity")
manager_new = sales.groupby("Manager").apply(weighted_average, "New_Product_Price", "Quantity")
print("按经理分组的当前价格加权平均:\n", manager_current)
print("按经理分组的新产品价格加权平均:\n", manager_new)
按州分组计算
state_new = sales.groupby("State").apply(weighted_average, "New_Product_Price", "Quantity")
print("按州分组的新产品价格加权平均:\n", state_new)
多级分组计算
multi_group = sales.groupby(["Manager", "State"]).apply(weighted_average, "New_Product_Price", "Quantity")
print("按经理和州分组的新产品价格加权平均:\n", multi_group)
组合多种聚合函数
Pandas的agg
方法允许我们同时应用多种聚合函数:
aggregations = {
'New_Product_Price': ['mean'], # 简单平均
'Current_Price': ['median'], # 中位数
'Quantity': ['sum', 'mean'] # 总和和平均
}
result = sales.groupby("Manager").agg(aggregations)
print("多种聚合函数组合:\n", result)
构建自定义聚合结果表
我们可以将多个加权平均结果组合成一个清晰的表格:
summary = pd.DataFrame({
'New Product Weighted Avg': manager_new,
'Current Product Weighted Avg': manager_current
})
print("加权平均结果汇总表:\n", summary)
实际应用建议
-
业务场景选择:当不同数据点的重要性不同时(如销售数量差异大),应优先使用加权平均。
-
异常值处理:加权平均对极端值更敏感,分析前应先检查数据质量。
-
权重选择:确保权重列能准确反映各数据点的重要性,常见的权重包括数量、金额、时间等。
-
结果解释:向非技术人员解释时,应说明加权平均与简单平均的区别及其业务意义。
总结
通过pbpython项目的销售数据分析案例,我们学习了:
- 加权平均的基本概念和计算方法
- 使用Pandas和NumPy实现加权平均的多种方式
- 创建灵活的自定义加权平均函数
- 分组计算加权平均的技巧
- 组合多种聚合函数的方法
加权平均是数据分析中的重要工具,掌握这些技巧可以帮助我们更准确地分析业务数据,做出更合理的决策。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考