【问题标题】:How to input all the featues in one vector column如何在一个向量列中输入所有特征
【发布时间】:2021-06-18 07:19:40
【问题描述】:

拥有这样的数据框:

|   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     |
            .
            .
            .

每一列都变成了一个向量... 我知道如何做相反的事情,即使用VectorAssembler将每一行中的所有值放入一个向量中,但我不知道如何将每一列中的所有值放入这样的向量中。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas dataframe pyspark


    【解决方案1】:

    你可以这样做,但是

    In [33]: pd.DataFrame([[tuple(df[c]), 0] for c in df], columns=['Attributes', 'label'])
    Out[33]: 
             Attributes  label
    0  (11, 22, 12, 42)      0
    1   (12, 16, 17, 3)      0
    2    (4, 10, 75, 6)      0
    

    但是,将这样的元组存储在数据框中效率不高。

    【讨论】:

      【解决方案2】:

      使用 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()
      

      +----+----------------+-----+
      |cols|       Attribute|label|
      +----+----------------+-----+
      |  X1|[11, 22, 12, 42]|    0|
      |  X3|  [4, 10, 75, 6]|    0|
      |  X2| [12, 16, 17, 3]|    0|
      +----+----------------+-----+
      

      【讨论】:

        猜你喜欢
        • 2018-01-15
        • 1970-01-01
        • 2018-04-12
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        相关资源
        最近更新 更多