You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas或NumPy中简便实现累积加权平均计算?

加权累积平均值的Pandas/NumPy实现方案

当然可以啦!用Pandas或者NumPy都能轻松实现你想要的加权累积平均值计算,虽然Pandas没有直接提供pd.cum_mean(value=df.val, weight=df.wt)这种现成函数,但通过简单的组合操作就能达到目的,逻辑完全贴合你的计算规则。

先明确下需求:

原始DataFrame

valwt
1100
2300
3200

目标DataFrame

valwtcum_wt_avg
1100100
2300220
3200210

计算规则:cum_wt_avg[i] = cum_sum(val*wt)[i] / cum_sum(wt)[i]


用Pandas实现(推荐)

直接利用Pandas的cumsum()方法,一步就能算出结果,代码简洁又直观:

import pandas as pd

# 构造原始数据
df = pd.DataFrame({'val': [1, 2, 3], 'wt': [100, 300, 200]})

# 计算加权累积和与权重累积和,相除得到目标列
df['cum_wt_avg'] = (df['val'] * df['wt']).cumsum() / df['wt'].cumsum()

print(df)

运行这段代码后,输出结果和你想要的目标DataFrame完全一致,而且计算效率很高,适合处理大规模数据。

用NumPy实现

如果习惯用NumPy的话,原理也是一样的,先计算两个数组的累积和再相除:

import numpy as np
import pandas as pd

# 定义原始数组
val_arr = np.array([1, 2, 3])
wt_arr = np.array([100, 300, 200])

# 计算累积和与最终结果
cum_val_wt = np.cumsum(val_arr * wt_arr)
cum_wt = np.cumsum(wt_arr)
cum_wt_avg_arr = cum_val_wt / cum_wt

# 转成DataFrame格式
df = pd.DataFrame({'val': val_arr, 'wt': wt_arr, 'cum_wt_avg': cum_wt_avg_arr})

内容的提问来源于stack exchange,提问作者Mani Bharathy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:12:32