首页 > 解决方案 > 重构pyspark数据框

问题描述

我正在解决回归问题。为此,我首先对数据进行聚类,并对每个聚类应用回归模型。现在我想实现另一个回归模型,它将每个集群的预测输出作为一个特征,并输出聚合的预测值。

我已经在 pyspark 中实现了聚类和回归模型。但我无法最终将每个集群的输出提取为另一个回归模型的输入特征。

如何在 pyspark(最好)或 pandas 中有效地实现这种转换?

当前数据框:

date   cluster  predVal actual
31-03-2019 0     14      13
31-03-2019 1     24      15
31-03-2019 2     13      10
30-03-2019 0     14      13
30-03-2019 1     24      15
30-03-2019 2     13      10

所需的数据框

date       predVal0    predVal1   predVal2    actual
31-03-2019 14          24         13          38  // 13+15+10
30-03-2019 14          24         13          38  // 13+15+10

标签: python-3.xpandasdataframepyspark

解决方案


您想在 pyspark 中进行数据透视,然后通过对 predVal{i} 列求和来创建一个新列。您应该分三个步骤进行。

第一步,您要应用枢轴。您的索引是日期,您要透视的列是集群和值的列(如果是 predVal)。

df_pivot = df.groupBy('date').pivot('cluster').agg(first('predVal'))

然后,你应该申请一个总和

df_actual = df.groupBy('date').sum('actual')

最后,您可以将实际列与索引列数据上的数据透视数据连接起来:

df_final = df_pivot.join(df_actual ,['date']) 

这个链接很好地回答了你的问题: - https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-apache-spark.html


推荐阅读