You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于另一DataFrame替换指定值为0、其余值为1的实现需求

解决方案

在Databricks中可以通过Spark的正则替换函数实现需求,步骤如下:

  1. 提取匹配目标:从df2中收集需要替换为0的ids列表,构建正则匹配模式(确保精确匹配完整的id,避免误匹配子串)。
  2. 两次正则替换:先将匹配到的目标id替换为0,再将剩余的字母数字类元素替换为1,同时保留原有的分隔符、符号及NULL值。

代码实现(Python)

from pyspark.sql import functions as F
import re

# 从df2中获取需要替换的ids列表
ids_list = [row.ids for row in df2.collect()]

# 构建正则匹配模式,转义特殊字符确保精确匹配
pattern = r'\b(' + '|'.join(re.escape(id) for id in ids_list) + r')\b'

# 处理df1的name列
df_result = df1.withColumn(
    "name",
    F.when(
        F.col("name").isNull(),
        F.col("name")  # 保留NULL值
    ).otherwise(
        # 第一步:匹配目标ids替换为0
        F.regexp_replace(
            # 第二步:剩余字母数字元素替换为1
            F.regexp_replace(F.col("name"), pattern, "0"),
            r'\b[a-zA-Z0-9]+\b',
            "1"
        )
    )
)

# 查看结果
df_result.show(truncate=False)

代码说明

  • re.escape(id):对每个id进行转义,避免ids中包含正则特殊字符(如.+*)时导致匹配异常。
  • 第一次regexp_replace:精准匹配df2中的ids,替换为0。
  • 第二次regexp_replace:匹配所有独立的字母数字组合(未被替换的元素),替换为1。
  • F.when:判断name是否为NULL,保留原始NULL值不做处理。

验证结果

运行后得到的df_result与预期输出完全一致:

id name
1  1/1/0
2  0/1/1
3  0+1
4  1/1/0+0+1;
5  1+-0/+0+1;
6  ;
7  NULL

内容的提问来源于stack exchange,提问作者user1702932

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:26:30