我有两个存储在df中的多级别分类列:

  1. dow表示星期几(映射到整数的七个类别:1、2、...、7).
  2. type表示四种类型的观察(四种类别映射到整数:1、2、3、4).

如何在PySpark中创建这两个列的交互(即相乘)?

我知道怎么用OneHotEncoder来编码它们.然而,我不确定如何进行功能工程过程来解释所有28种组合(7x4种可能的情况),特别是因为OneHotEncoder返回稀疏向量.

为了回答这个问题,假设我的pyspark数据帧df如下所示:

dow type target
1 1 200
1 2 222
1 7 229

其中dow可以有七种不同的值,type可以有四种值.有没有一种内置的方法来创建这两个列之间的交互,以便考虑所有可能的组合?

推荐答案

您可以进行整数编码,方法是将dow乘以10,然后再加上type,从而 for each 唯一值创建单独的整数:

(
    df
    .select(
        (F.col('dow') * F.lit(10) + F.col('type')).alias('result'), 
        'dow', 
        'type'
    )
    .show()
)

+------+---+----+
|result|dow|type|
+------+---+----+
|    11|  1|   1|
|    12|  1|   2|
|    17|  1|   7|
+------+---+----+

Python相关问答推荐

线性模型PanelOLS和statmodels OLS之间的区别

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

使用新的类型语法正确注释ParamSecdecorator (3.12)

对某些列的总数进行民意调查,但不单独列出每列

基于索引值的Pandas DataFrame条件填充

对象的`__call__`方法的setattr在Python中不起作用'

导入...从...混乱

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

为什么if2/if3会提供两种不同的输出?

跳过嵌套JSON中的级别并转换为Pandas Rame

在代码执行后关闭ChromeDriver窗口

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

pandas:在操作pandora之后将pandora列转换为int

Python 3试图访问在线程调用中实例化的类的对象

对于标准的原始类型注释,从键入`和`从www.example.com `?

按列表分组到新列中

使用Scikit的ValueError-了解

将时间序列附加到数据帧

在Django REST框架中定义的URL获得404分