gpt4 book ai didi

python - Pyspark:将平均值作为新列添加到 DataFrame 中

转载 作者:行者123 更新时间:2023-12-01 02:54:16 26 4
gpt4 key购买 nike

我正在计算数据帧中一列的平均值,但它导致所有值为零。有人可以帮我解释为什么会发生这种情况吗?以下是列转换前后的代码和表格。

在计算平均值并添加“平均值”列之前

result.select("dis_price_released").show(10)
+------------------+
|dis_price_released|
+------------------+
| 0.0|
| 4.0|
| 4.0|
| 4.0|
| 1.0|
| 4.0|
| 4.0|
| 0.0|
| 4.0|
| 0.0|
+------------------+

计算平均值并添加平均值列后

w = Window().partitionBy("dis_price_released").rowsBetween(-sys.maxsize, sys.maxsize)
df2 = result.withColumn("mean", avg("dis_price_released").over(w))
df2.select("dis_price_released", "mean").show(10)

+------------------+----+
|dis_price_released|mean|
+------------------+----+
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
+------------------+----+

最佳答案

您可以首先计算整列的 avg,然后使用 lit() 将其作为变量添加到 DataFrame 中,不需要窗口函数:

from pyspark.sql.functions import lit

mean = df.groupBy().avg("dis_price_released").take(1)[0][0]
df.withColumn("test", lit(mean)).show()
+------------------+----+
|dis_price_released|test|
+------------------+----+
| 0.0| 2.5|
| 4.0| 2.5|
| 4.0| 2.5|
| 4.0| 2.5|
| 1.0| 2.5|
| 4.0| 2.5|
| 4.0| 2.5|
| 0.0| 2.5|
| 4.0| 2.5|
| 0.0| 2.5|
+------------------+----+

关于python - Pyspark:将平均值作为新列添加到 DataFrame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44382822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com