[英]PySpark - For Each Unique ID and Column Condition Set Value of 1
您可以將sum
與window
結合使用。 在 window 中,您只需匯總前幾行的價格。 使用結果列,您可以檢查記錄是否是第一個非零條目。 前面行的總和應該為零,記錄本身的價格非零。
我創建了一個與您的略有不同的示例數據集,但它應該向您展示該方法。
from pyspark import sql
from pyspark.sql.window import Window
from pyspark.sql import functions as f
spark = sql.SparkSession.builder.master('local').getOrCreate()
df = spark.createDataFrame([[123,201902,0],[123,201903,0],[123,201904,100],[123,201905,100],[123,201906,0]], ['ID', 'MonYer', 'Price'])
w = Window.partitionBy('ID').orderBy('MonYer').rangeBetween(Window.unboundedPreceding, -1)
df = (df
.withColumn('sum', f.sum('Price').over(w) )
.withColumn('wanted', f.when((f.col('Price') > 0) & (f.col('Sum') == 0), 1).otherwise(0))
.drop('sum')
)
df.show()
+---+------+-----+------+
| ID|MonYer|Price|wanted|
+---+------+-----+------+
|123|201902| 0| 0|
|123|201903| 0| 0|
|123|201904| 100| 1|
|123|201905| 100| 0|
|123|201906| 0| 0|
+---+------+-----+------+
注意:此解決方案假定所有價格值都 >= 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.