[英]Pyspark Groupby Create Column
在 Pyspark 中,我需要按ID
分組並創建四個新列(min、max、std、ave)。
from pyspark.sql import functions as F
from pyspark.sql.window import Window
w = (Window.orderBy(F.col("Date").cast('long')).rowsBetween(-4, 0))
df = df.groupby("ID") \
.withColumn('hr1_ave', F.avg("rpm").over(w))\
.withColumn('hr1_std', F.stddev("rpm").over(w))\
.withColumn('hr1_min', F.min("rpm").over(w))\
.withColumn('hr1_max', F.max("rpm").over(w))
我也試過:
df.groupby("ID").select('rpm', f.avg('rpm').over(w).alias('hr1_avg'))
但是我對這兩個命令都收到此錯誤:
AttributeError: 'GroupedData' object has no attribute 'withColumn'
有沒有辦法為每個ID
創建一個新列並創建這些列,或者我的語法不正確?
謝謝。
您需要將“分組”列ID
移動到 window 定義中作為partitionBy
的參數。 然后groupBy
不是必需的:
代碼
w = Window.partitionBy("ID").orderBy(F.col("Date").cast('long')).rowsBetween(-4, 0)
df \
.withColumn('hr1_ave', F.avg("rpm").over(w))\
.withColumn('hr1_std', F.stddev("rpm").over(w))\
.withColumn('hr1_min', F.min("rpm").over(w))\
.withColumn('hr1_max', F.max("rpm").over(w)) \
.show()
應該打印您的預期結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.