Python 用前一行的平均值填充空值

Python 用前一行的平均值填充空值,python,dataframe,apache-spark,pyspark,Python,Dataframe,Apache Spark,Pyspark,以下是我的示例数据: date,number 2018-06-24,13 2018-06-25,4 2018-06-26,5 2018-06-27,1 2017-06-24,3 2017-06-25,5 2017-06-26,2 2017-06-27,null 2016-06-24,3 2016-06-25,5 2016-06-26,2 2016-06-27,7 2015-06-24,8 2015-06-25,9 2015-06-26,12 2015-06-27,13 我需要用上一年数据的平均

以下是我的示例数据:

date,number
2018-06-24,13
2018-06-25,4
2018-06-26,5
2018-06-27,1
2017-06-24,3
2017-06-25,5
2017-06-26,2
2017-06-27,null
2016-06-24,3
2016-06-25,5
2016-06-26,2
2016-06-27,7
2015-06-24,8
2015-06-25,9
2015-06-26,12
2015-06-27,13
我需要用上一年数据的平均值填充空值。 也就是说,如果
'2017-06-27'
为空值,我需要用
“2016-06-27”
'2015-06-27'
数据的平均值填充它

输出

date,number
2018-06-24,13
2018-06-25,4
2018-06-26,5
2018-06-27,1
2017-06-24,3
2017-06-25,5
2017-06-26,2
2017-06-27,10
2016-06-24,3
2016-06-25,5
2016-06-26,2
2016-06-27,7
2015-06-24,8
2015-06-25,95
2015-06-26,12
2015-06-27,13
我使用了下面的代码,但它给出了一个特定分区中所有内容的平均值

提取的日期和月份列

wingrp = Window.partitionBy('datee','month')
df = df.withColumn("TCount",avg(df["Count"]).over(wingrp))

您的解决方案是朝着正确方向迈出的一步(即使您没有显示已添加的列)。您需要在窗口中按月份和月份的日期进行分区,按日期列对结果窗口进行排序(基本上是按年份),然后将窗口限制为前面的所有行。像这样:

从pyspark.sql.functions导入*
从pyspark.sql.types导入*
从pyspark.sql.window导入窗口
schema=StructType([
StructField(“日期”,DateType(),True),
StructField(“number”,IntegerType(),True)
])
df=spark.read.csv(“your_data.csv”,
header=True,
schema=schema)
风=(窗户)
.partitionBy(月(日),月(日))
.orderBy(“日期”)
.rowsBetween(Window.unbounddpreceiding,Window.currentRow)
)
结果=(df
.withColumn(“结果”,
联合(测向数,平均(测向数)。超过(风)))
)

嘿,阿苏,你能告诉我们你试过什么吗?现在,你的问题给人的印象是,你只是希望这里的人会为你编写代码。你看过窗口功能了吗?更新了任务,请看一看