I Want add missing values with zero sales and calculate 3 month average in pyspark
My Input :
product specialty date sales
A pharma 1/3/2019 50
A pharma 1/4/2019 60
A pharma 1/5/2019 70
A pharma 1/8/2019 80
A ENT 1/8/2019 50
A ENT 1/9/2019 65
A ENT 1/11/2019 40
my output:
product specialty date sales 3month_avg_sales
A pharma 1/3/2019 50 16.67
A pharma 1/4/2019 60 36.67
A pharma 1/5/2019 70 60
A pharma 1/6/2019 0 43.33
A pharma 1/7/2019 0 23.33
A pharma 1/8/2019 80 26.67
A ENT 1/8/2019 50 16.67
A ENT 1/9/2019 65 38.33
A ENT 1/10/2019 0 38.33
A ENT 1/11/2019 40 35
row = Row("Product", "specialty","Date", "Sales")
df = sc.parallelize([row("A","pharma", "1/3/2019", 50),row("A","pharma", "1/4/2019", 60),row("A", "pharma","01/05/2019", 70),row("A","pharma", "1/8/2019", 80),row("A","ENT", "1/8/2019", 50),row("A","ENT", "1/9/2019", 65),row("A","ENT", "1/11/2019", 40)]).toDF()
w = Window.partitionBy("product","specialty).orderBy("date")
df.withColumn("new_data_date", expr("add_months(data_date, 1)"))
df.withcolumn("sales",F.where(col("date") isin col("new_data_date")
df=df.withColumn('index', (year('Date') - 2020) * 12 + month('Date')).withColumn('avg',sum('Sales').over(w) / 3)
I am struck adding where ever date value is missed with sales value is zero . And calculate 3month average .