我有这种格式的数据框:
Date | Return
01/01/2015 0.0
02/02/2015 0.04
03/02/2015 0.06
04/02/2015 0.16
我需要计算每一行的累积标准偏差,并选择其上方的行数。所以我的结果看起来有点像这样:
Date | Rows above | Compounded
01/01/2015 0 0(First element to be kept zero)
02/02/2015 1 0.02828427125(Std_Dev of 0,0.04)
03/02/2015 2 0.03055050463(Std_Dev of 0,0.04,0.06)
04/02/2015 3 0.06806859286(Std_Dev of 0,0.04,0.06,0.16)
我是SparkSQL的新手,也是窗口函数的新手。所以Java中的答案将非常值得注意。感谢。
答案 0 :(得分:0)
您可以使用标准操作和窗口功能实际执行此操作。 基本上标准偏差可以通过计算和X ^ 2,和X和n(元素数)来计算。因此,对窗口函数中的所有三个进行聚合,然后计算这些值的标准偏差。
这样的事情(freeform pyspark):
window = Window.sortby("Date")
aggDF = df.agg(sum(df["Returns"]).alias("sumx"), sum(df["Returns"]*df["returns"]).alias("sumx2"), count(df["returns"]).alias("cnt"))
Ex_2 = aggDF["sumx2"] / aggDF["cnt"])
Ex = aggDF["sumx"] / aggDF["cnt"])
newDF = df.withcolumn("Var", Ex_2 - (Ex * Ex))
当然你必须处理0个元素的情况,如果你想做标准差而不是方差你应该取平方根