使用Pandas实现加权平均计算:pbpython项目实战解析

使用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)

实际应用建议

  1. 业务场景选择:当不同数据点的重要性不同时(如销售数量差异大),应优先使用加权平均。

  2. 异常值处理:加权平均对极端值更敏感,分析前应先检查数据质量。

  3. 权重选择:确保权重列能准确反映各数据点的重要性,常见的权重包括数量、金额、时间等。

  4. 结果解释:向非技术人员解释时,应说明加权平均与简单平均的区别及其业务意义。

总结

通过pbpython项目的销售数据分析案例,我们学习了:

  1. 加权平均的基本概念和计算方法
  2. 使用Pandas和NumPy实现加权平均的多种方式
  3. 创建灵活的自定义加权平均函数
  4. 分组计算加权平均的技巧
  5. 组合多种聚合函数的方法

加权平均是数据分析中的重要工具,掌握这些技巧可以帮助我们更准确地分析业务数据,做出更合理的决策。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滕婉昀Gentle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值