解决Pandas分组加权平均的ZeroDivisionError及RuntimeWarning问题
解决分组加权平均的ZeroDivisionError问题
问题根源是部分分组的count列总和为0,导致加权平均计算时触发除以0的错误。直接用np.average或np.ma.average无法优雅处理这种边界情况,建议自定义计算函数来控制逻辑:
- 先计算分组内
count的总和,判断是否为0 - 若总和为0,可根据业务需求返回0或NaN
- 若总和不为0,再计算加权平均
代码实现
def weighted_avg(x): total_count = x['count'].sum() if total_count == 0: return 0 # 也可返回np.nan,根据实际业务场景调整 return (x['average_speed'] * x['count']).sum() / total_count df_byday = df_merged.groupby("count_date").apply(weighted_avg)
说明
- 手动计算加权平均(分子为
average_speed与count的乘积之和,分母为count总和),逻辑完全可控,不会触发错误或警告 - 若选择返回
np.nan,后续可通过df_byday.fillna(0)将空值替换为0,适配不同业务需求
内容的提问来源于stack exchange,提问作者Para
相关产品推荐
相关产品推荐

