根据包含列表元素的列值创建布尔标志[重复]

Posted

技术标签:

【中文标题】根据包含列表元素的列值创建布尔标志[重复]【英文标题】:Create boolean flag based on column value containing element of a List [duplicate] 【发布时间】:2019-04-17 16:43:08 【问题描述】:
def myFunction(df: DataFrame): DataFrame = 
    val myList= List("a","b","c")

    df
      .withColumn("myFlag",
        if (myList.contains(df.select(col("columnName1")))) lit("true") else lit(false))

我想编写一个函数,它接受一个 Dataframe,并向其中添加一个名为“myFlag”的列。

如果对应的“columnName1”的值是“myList”的元素,我希望“myFlag”为true,否则为false

为简单起见,“columnName1”值和“myList”仅包含字符串。

我上面的功能不起作用。有什么建议吗?

【问题讨论】:

【参考方案1】:

这可以使用在Column 上定义的isin 来完成:

import spark.implicits._

df
  .withColumn("myFlag",$"columnName1".isin(myList:_*))

【讨论】:

不确定 $ 在做什么。它似乎不起作用,所以请解释或更新。 当您想要引用列时使用 $ 符号。所以 $"col1" 将使用 "col1" 的值并执行后续操作,检查它是否在您的列表中,在上面的示例中。或者,您可以编写 col("col1") ,据我所知,这是一回事

以上是关于根据包含列表元素的列值创建布尔标志[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]

将包含列表的记录值与 Postgres 中的列值进行比较

在python中过滤与列表值匹配的列值的数据框[重复]

从 Kentico 10 中的自定义表重复器中过滤重复的列值

如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?

按 R 中的列值过滤列表中的每个数据框