Python 如何在一个向量列中输入所有特征
具有如下数据帧:Python 如何在一个向量列中输入所有特征,python,pandas,dataframe,pyspark,Python,Pandas,Dataframe,Pyspark,具有如下数据帧: | X1 | X2 | X3 | | ----- | ----- | ----- | | 11 | 12 | 4 | | 22 | 16 | 10 | | 12 | 17 | 75 | | 42 | 3 | 6 | . . . 如何将其转换为: | Attributes | label | | -----
| X1 | X2 | X3 |
| ----- | ----- | ----- |
| 11 | 12 | 4 |
| 22 | 16 | 10 |
| 12 | 17 | 75 |
| 42 | 3 | 6 |
.
.
.
如何将其转换为:
| Attributes | label |
| ------------- | ----- |
| (11,22,12,42) | 0 |
| (12,16,17,3) | 0 |
| (4,10,75,6 ) | 0 |
.
.
.
每一列都成为一个向量。。。
我知道如何做相反的事情,即使用vectorsemblember
将每行的所有值放入一个向量中,但我不知道如何将每列的所有值放入这样的向量中
任何帮助都将不胜感激。不过,您可以这样做
但是,在数据帧中存储这样的元组是没有效率的。使用pyspark,您可以使用groupby进行堆叠和聚合:
(df.selectExpr("stack(3,'X1',X1,'X2',X2,'X3',X3) as (cols,vals)")
.groupBy("cols").agg(F.collect_list("vals").alias("Attribute"))
.withColumn("label",F.lit(0))).show()
(df.selectExpr("stack(3,'X1',X1,'X2',X2,'X3',X3) as (cols,vals)")
.groupBy("cols").agg(F.collect_list("vals").alias("Attribute"))
.withColumn("label",F.lit(0))).show()
+----+----------------+-----+
|cols| Attribute|label|
+----+----------------+-----+
| X1|[11, 22, 12, 42]| 0|
| X3| [4, 10, 75, 6]| 0|
| X2| [12, 16, 17, 3]| 0|
+----+----------------+-----+