我的数据块笔记本中有两个数据框。例如数据如下所示:
df1:
id name
1 200/300A/200B
2 805/805B/500
3 22A+100B
4 ;
5
df2:
ids
805
200B
22A
现在我想用 df2 id 替换 df1 名称为 0,其余的 id 为“1”,例如,dataframe1 中显示为 805、200B 和 22A 的数据需要替换为零。
df
id name
1 1/1/0
2 0/1/1
3 0+1
4 ;
4
查看以下代码
WITH input AS (
SELECT
id,
name,
r.ids
FROM VALUES (1 ,'200/300A/200B'),(2 ,'805/805B/500'),(3 ,'22A+100B'),(4 ,';'),(5, NULL) AS (id, name)
JOIN ( SELECT COLLECT_LIST(ids) AS ids FROM VALUES ('805'),('200B'),('22A') AS (ids) ) r
)
SELECT
id,
CASE WHEN LENGTH(name) == 1 THEN name
ELSE
transform(
array_distinct(
regexp_extract_all(name, '[^a-zA-Z0-9]', 0)
),
t ->
CONCAT_WS(
t,
transform(
split(name, concat('[',t,']')),
s -> if(array_contains(ids,s), 0, 1)
)
)
)[0]
END AS name
FROM input
+---+-----+
|id |name |
+---+-----+
|1 |1/1/0|
|2 |0/1/1|
|3 |0+1 |
|4 |; |
|5 |NULL |
+---+-----+