当前位置: 首页 > 知识库问答 >
问题:

如果不在列表中,如何替换值?

滕英奕
2023-03-14

我有一个列中所有值都不同的列表,我需要用1替换该列表中不存在的所有值

uniq = X_train3.select('street').distinct().collect()
X_test3 = X_test3.withColumn('street', F.when(array_contains('street', uniq), 1))
uniq = X_train3.select('street').distinct().collect()
X_test3 = X_test3.withColumn('street', F.when(~col('street').isin(uniq), 1))

这是我在python中所做的工作:

uniq = X_train3[cl].unique()
uniq = uniq.tolist()
X_test3['street'] = X_test3['street'].map(lambda x: 1 if x not in uniq else x)]

共有1个答案

马弘益
2023-03-14

您可以这样做(在Scala中,编写等效的pyspark):

val new_X_test3 = X_test3
.join(X_train3
    .select("street")
    .distinct()
    .withColumnRenamed("street","street_train"), 
    col("street") === col("street_train"), 
    "leftouter")
.withColumn("street_test", 
    when(col("street_train").isNull, lit("1"))
    .otherwise(col("street")))
.drop("street","street_train")
.withColumnRenamed("street_test","street")

另外,如果您确信唯一街道的列表非常小(因为您尝试在代码中的驱动程序上收集它),您可以在x_train3周围提供broadcast提示。因此代码变成:

val new_X_test3 = X_test3
.join(broadcast(X_train3
    .select("street")
    .distinct()
    .withColumnRenamed("street","street_train")), 
    col("street") === col("street_train"), 
    "leftouter")
.withColumn("street_test", 
    when(col("street_train").isNull, lit("1"))
    .otherwise(col("street")))
.drop("street","street_train")
.withColumnRenamed("street_test","street")
 类似资料:
  • 我在Javascript中有一个对象,它有一些条目,如: 我想替换键像: 但我得到了错误:forecasts.map不是一个函数 我已经检查过了,但它不起作用。我如何更换这些钥匙?

  • 我不小心从表中删除了我的记录。此记录有一个键列与数据库中的一些其他表绑定。我已经恢复了数据库,我可以访问以前删除的记录。当我尝试使用INSERT SELECT方法时,我得到的消息然后,我对所有列运行INSERT(但在表设计中标识设置为yo YES的第一列除外)。现在我在想有没有办法更新钥匙?新记录自动生成新密钥,我想将该值更新为旧密钥。以下是示例: 临时/备份表: 用临时列i_key值更新当前列i

  • 给定数据集 如果其中一个或两个都为空,则如何将同时替换为其他值,如(5,6)? 这适用于地理数据集,当纬度/lng 未知且应在其他地方获得时。所以udf很耗时,我想确保它只为必要的行调用(其中foo和bar都是空的) 下面的代码 是不好的尝试 因此,有必要以某种方式将数组解压缩到列中。 考虑到这一点,它不能一步到位地完成 Apache Spark - 将UDF的结果分配给多个数据帧列 但是,即使我

  • 问题内容: 我试图将字符串分成数组并替换为,但无法做到,我也尝试了String.replaceAll这样的东西。 我想提供一个通往JNI的路径,并且它只能以这种方式读取。 问题答案: 在这种情况下不要使用- 这是用正则表达式指定的,这意味着您需要更多的转义。这应该很好: 请注意,由于Java字符串文字中的原因,反斜杠加倍-因此此处涉及的 实际 字符串是“单反斜杠”和“双反斜杠”-而不是双倍和四倍。

  • 在索引位置1的输入中遇到的字符串的前半部分将被替换为字符“-”使用流我们如何执行操作? 我有上面的列表,我想用我这样做的循环将每个嵌套列表值的第一个位置替换为“-” 样本输出:[[0,-],[6,-],[0,-],[6,gh],[4,ij],[0,ab],[6,cd]] 但是任何人都可以解释如何使用流来实现同样的目标