如何在 Pandas 中计算加权平均值?

2025年1月5日 | 阅读 5 分钟

计算加权平均值在数据评估中是一项常见的任务,其中特定值对最终平均值的贡献度不相等。Pandas 是 Python 中强大的数据处理库,它提供了简单而有效的计算加权平均值的方法。本文将指导您完成使用 Pandas 计算加权平均值的步骤。

什么是加权平均值?

加权平均值是一种平均值,其中不同的值在最终结果中具有不同程度的重要性,或“权重”。与所有值都同等对待的简单平均值不同,加权平均值会考虑每个值的相对重要性。

加权平均值公式

加权平均值的计算公式为

How to Calculate Weighted Average in Pandas

其中

  • valuei 是每个个体的数值
  • weighti 是每个数值的权重

举例说明

假设您是一名学生,参加了四次考试,并取得了以下成绩和相应的权重(重要性)

考试成绩权重
901
802
853
954

在此,权重反映了每门考试相对于其他考试的重要性。

1. 将每项成绩乘以其权重

  • 90 × 1 = 90
  • 80 × 2 = 160
  • 85 × 3 = 255
  • 95 × 4 = 380

2. 对加权成绩求和

90 + 160 + 255 + 380 = 885

3. 对权重求和

1 + 2 + 3 + 4 = 10

将加权成绩的总和除以权重的总和

How to Calculate Weighted Average in Pandas

因此,加权平均成绩为 88.5。

为什么使用加权平均值?

在许多实际场景中,加权平均值非常重要,因为它能够更准确、更有意义地表示数据。以下是使用加权平均值的几个主要原因:

1. 反映重要性或意义

并非所有数据点都同等重要。加权平均值允许您根据其重要性为某些值赋予比其他值更大的分量。这在某些数据点应比其他数据点对最终结果产生更大影响的情况下至关重要。

示例:在教育中,期末考试通常比小测验的权重更大。使用加权平均值可确保最终成绩反映考试的更高重要性。

2. 处理不同频率

数据点可能出现的频率不同。加权平均值可以通过为更频繁出现的值分配更高的权重来解决此问题,从而提供更准确的平均值,以反映数据的实际分布。

示例:在民意调查分析中,可能需要对不同人口统计群体的回应进行加权,以确保结果能准确地代表总体。如果某个群体代表性不足,可以为其回应分配更高的权重。

3. 投资组合管理

在金融领域,投资组合中的不同投资有不同的投资金额。加权平均值可以通过考虑每项投资的百分比来计算整体回报。

示例:如果您在股票 A 中投资了 10,000 美元,回报率为 5%,在股票 B 中投资了 20,000 美元,回报率为 10%,那么加权平均回报率可以更清晰地反映您投资组合的整体表现。

4. 更好的决策制定

加权平均值提供了一个更细致、更精确的度量,从而能够做出更明智的决策。这在各种因素以不同程度影响结果的企业和经济领域尤其有用。

示例:在营销中,不同广告活动的有效性可能根据其覆盖范围或转化率进行加权,以确定整体成功度。

5. 平衡变异性

在统计分析中,异常值或极端值可能会使简单平均值产生偏差。加权平均值可以通过赋予这些极端值较低的权重来减轻这种情况,从而获得更准确、更可靠的度量。

示例:在质量控制中,如果某些测量值被认为不太可靠,则可以为其分配较低的权重,从而减少它们对最终平均质量得分的影响。

关键点

  • 准确的表示:反映了不同数据点的实际重要性。
  • 灵活性:可应用于教育、金融和民意调查分析等各种领域。
  • 均衡的见解:有助于处理异常值和不同频率的影响。
  • 明智的决策:提供更精确的度量以做出更明智的决策。

在 Pandas 中计算加权平均值的分步指南

在 Pandas 中计算加权平均值涉及数据处理和数学运算的结合。本分步指南将向您展示如何使用 Pandas DataFrame 来实现这一点。

步骤 1:导入 Pandas 和 NumPy

首先,请确保您已安装 Pandas 和 NumPy。如果尚未安装,您可以使用 pip 进行安装:

现在,导入库:

步骤 2:创建 DataFrame

接下来,创建一个包含您的数据的 DataFrame。假设我们有一个包含数值及其相应权重的数据集:

输出

   val  wght
0   20     1
1   25     2
2   35     3
3   45     4

步骤 3:使用 Pandas 计算加权平均值

您可以通过手动将每个数值与其权重相乘,对结果求和,然后除以权重的总和来计算加权平均值:

输出

Weighted average using pandas: 35.5

计算细分

  • df['val'] * df['wght']:将每个数值与其对应的权重相乘。
  • .Sum():对这些乘积求和,得到加权总和。
  • df['wght'].Sum():对权重求和。
  • 将加权总和除以总权重即得到加权平均值。

步骤 4:使用 NumPy 计算加权平均值

或者,您也可以使用 NumPy 的 np.Average 函数,它直接支持权重:

输出

Weighted average using numpy: 35.5

np.average 接受两个参数:数值及其对应的权重,它会返回加权平均值。

完整代码

输出

Weighted average using pandas: 30.0
Weighted average using numpy: 30.0