将DataFrame中的一个新派生列从布尔类型转换为整数类型

14 浏览
0 Comments

将DataFrame中的一个新派生列从布尔类型转换为整数类型

假设我有一个带有以下模式的DataFrame x

xSchema = StructType([ \
    StructField("a", DoubleType(), True), \
    StructField("b", DoubleType(), True), \
    StructField("c", DoubleType(), True)])

然后我有了DataFrame:

DataFrame[a :double, b:double, c:double]

我想要衍生一个整数列。我可以创建一个布尔列:

x = x.withColumn('y', (x.a-x.b)/x.c > 1)

我的新模式是:

DataFrame[a :double, b:double, c:double, y: boolean]

但是,我希望列 y 的值为False时为0,为True时为1。

cast 函数只能对列进行操作,而不是DataFrame,withColumn 函数只能对DataFrame进行操作。我如何同时添加一个新列并将其转换为整数?

0
0 Comments

Casting a new derived column in a DataFrame from boolean to integer

在使用DataFrame时,有时我们需要根据已有列的条件来创建一个新的派生列。在这个过程中,有时候我们需要将布尔类型的列转换为整数类型的列。本文旨在探讨如何在DataFrame中将布尔类型的派生列转换为整数类型的派生列,并提供解决方法。

问题的出现原因:

问题的出现是因为在DataFrame中,我们无法直接将布尔类型的列转换为整数类型的列。在某些情况下,我们可能需要将布尔类型的派生列转换为整数类型的派生列,以便进行进一步的分析和计算。

解决方法:

为了解决这个问题,我们可以使用`withColumn`方法和`cast`方法来实现将布尔类型的列转换为整数类型的列。具体的解决方法如下所示:

x.withColumn('y', ((x.a-x.b) / x.c > 1).cast('integer')) # Or IntegerType()

上述代码中,`x`表示DataFrame对象,`a`、`b`和`c`分别表示已有的列。通过计算`(x.a-x.b) / x.c > 1`的结果,并使用`cast`方法将其转换为整数类型,然后将其赋值给新的派生列`y`。

通过以上的解决方法,我们可以将布尔类型的派生列转换为整数类型的派生列,从而满足进一步分析和计算的需求。

本文介绍了在DataFrame中将布尔类型的派生列转换为整数类型的派生列的解决方法。通过使用`withColumn`方法和`cast`方法,我们可以实现将布尔类型的列转换为整数类型的列,并满足进一步分析和计算的需求。希望本文对您在使用DataFrame时遇到的类似问题有所帮助。

0