python-3.x - 重构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
解决方案
您想在 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
推荐阅读
- excel - 如何从 Excel 生成一封电子邮件,其中考虑到选择了多少行
- android - netty-socketio:如何在应用程序最小化时保持 WebSocket 服务器处于活动状态
- flutter-layout - 应该使用什么来使文本小部件可点击?
- c++ - Visual Studio 中有没有办法对 cpp 文件进行数字签名
- python - 无法显示实时数据,这样做时 Python Web 应用程序正在生成错误“内部服务器错误”
- javascript - React DND - 在鼠标移动时获取拖动元素的坐标
- r - 如何将自定义的“dayHour”字符串变量转换为日期格式?
- c++ - 为什么 alignas() 不采用参数包?
- ibm-cloud - 使用 curl 调用 IBM Cloud Functions 会导致“提供的身份验证无效”
- sql-server - 在没有 Windows 身份验证的情况下从 Access VBA 运行 SQL 数据库中的存储过程