You need to enable JavaScript to run this app. Python如何使用Pandas对分组对象计算各月WMAPE
优惠活动
大模型
产品
解决方案
定价
更多

Python如何使用Pandas对分组对象计算各月WMAPE

按月份分组计算分月WMAPE的实现方法

核心逻辑说明

WMAPE本质是在单个独立计算范围内输出的标量结果:全局计算时,整个数据集作为一个计算范围,输出一个总WMAPE值;当你按月份把数据集拆成多个子集后,每个月份的子集就是独立的计算单元,每个单元执行相同的WMAPE计算公式,自然就会输出对应月份的WMAPE标量值,最终的结果是一个以月份为索引的Series,不存在“WMAPE只能输出全局单个值”的限制。
你之前的全局WMAPE计算逻辑是:对全量数据求和——分子是所有行的abs(actual - forecast)之和,分母是所有行的abs(actual)之和。按月份分组计算时,公式的计算逻辑完全不变,只是把求和范围从全局缩小到每个月份的分组内部。

性能最优的实现方案

这种写法完全基于pandas向量化计算,没有逐行循环的性能损耗,数据量较大时运行速度远高于groupby.apply方案,且计算结果和你原有的全局计算逻辑完全对齐:

# 1. 向量化计算逐行的两个核心统计量
revenue['abs_error'] = abs(revenue['actual'] - revenue['forecast'])
revenue['abs_actual'] = abs(revenue['actual'])

# 2. 按月份分组,对两个统计量分别做组内求和
monthly_stat = revenue.groupby('month')[['abs_error', 'abs_actual']].sum()

# 3. 逐组计算WMAPE,得到分月结果
monthly_wmape = monthly_stat['abs_error'] / monthly_stat['abs_actual']

逻辑一致性校验:将所有月份分组的abs_error总和、abs_actual总和相加后再做除法,得到的结果和你之前计算的全局WMAPE值(0.12206572769953052)完全一致,不存在计算偏差。

可选的自定义函数写法

如果希望直接在分组对象上套用计算逻辑,也可以编写自定义函数通过apply方法完成计算,这种写法逻辑更直观,但在百万行以上的大表上运行效率会低于上述向量化方案:

# 定义单组WMAPE计算函数
def calc_group_wmape(group_df):
    numerator = abs(group_df['actual'] - group_df['forecast']).sum()
    denominator = abs(group_df['actual']).sum()
    return numerator / denominator

# 对月份分组应用函数,得到分月WMAPE结果
monthly_wmape = revenue.groupby('month').apply(calc_group_wmape)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 09:45:07