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

Spark DataFrame按列值区分计算累计值 如何排除0值参与累计均值计算

解决方案

你只需要在计算brand3的累计均值时,先将TrueValue为0的值替换为null(Spark的avg函数会自动忽略null值,不会纳入统计),再匹配你给出的预期中当前行TrueValue为0时直接返回0的规则即可,修改后的代码如下:

windowval = (Window.partitionBy('Location','Brand').orderBy('month_in_timestamp')
               .rangeBetween(Window.unboundedPreceding, 0))

df = df.withColumn('TotalSumValue',
         F.when(F.col('Brand') == 'brand2', F.sum('TrueValue').over(windowval)) \
          .when(F.col('Brand') == 'brand3',
                F.when(F.col('TrueValue') == 0, F.lit(0.0))
                 .otherwise(F.avg(F.when(F.col('TrueValue') != 0, F.col('TrueValue'))).over(windowval))
               )
         )

如果你的实际需求不需要当前行值为0时返回0,只需要忽略0值计算累计均值,哪怕当前行是0也返回前面非0值的平均,去掉内层的判断即可,对应代码段为:

F.avg(F.when(F.col('TrueValue') != 0, F.col('TrueValue'))).over(windowval)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:48:03