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

在PySpark DataFrame中按时间窗口计算几何均值

PySpark 计算分组几何均值

核心思路

PySpark没有内置的几何均值函数,但可以通过对数转换+算术平均+指数还原的方式实现:
几何均值 = exp( 平均值( log(Val1) ) )
这个逻辑等价于n个数值乘积的n次方根,完全符合几何均值的数学定义。

实现代码

方式1:分组聚合得到目标结果(匹配你需要的输出格式)

from pyspark.sql import functions as F

# 按Time分组计算几何均值
result_df = df.groupBy("Time") \
    .agg(
        F.exp(F.avg(F.log(F.col("Val1")))).alias("geo_mean")
    ) \
    .orderBy("Time")

# 查看结果
result_df.show(truncate=False)

方式2:用窗口函数添加几何均值列(和你计算算术平均的方式一致)

如果需要保留原DataFrame的所有行,同时添加对应Time分组的几何均值:

from pyspark.sql import functions as F
from pyspark.sql.window import Window

# 定义窗口:按Time分组
w = Window.partitionBy("Time")

# 添加几何均值列
df_with_geo = df.withColumn(
    "geo_mean",
    F.exp(F.avg(F.log(F.col("Val1"))).over(w))
)

df_with_geo.show(truncate=False)

结果验证

  • Time=1时:3×6×8=144,三次方根≈5.24148,与预期结果一致
  • Time=2时:10×21×33=6930,三次方根≈19.06533,与预期结果一致

注意事项

如果数据中存在0或负数,log函数会报错,需要提前过滤这类数据,或者根据业务场景做特殊处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:37:45