python - 通过将逗号分隔的列的值替换为基于另一个数据框的查找来创建新列
问题描述
我有 PySpark 数据框 ( source_df
),其中有一列的值以逗号分隔。我正在尝试用基于另一个数据框的查找替换这些值(lookup_df
)
source_df
A B T ... followed by N unrelated columns...
foo a,b,c sam
bar k,a,c bob
faz b,a,f sam
查找_df
C D
a h1
b h2
c h3
输出数据框:
A T B new_col ... followed by N unrelated columns...
foo sam a,b,c h1,h2,h3
bar bob h,a,c EMPTY,h1,h3
faz sam b,a,f h2,h1,EMPTY
列A
是主键,并且始终是唯一的。对于给定的值,列T
是唯一的A
。
解决方案
您可以拆分和分解 B 列并进行左连接。然后收集 D 值并用逗号连接。
import pyspark.sql.functions as F
result = source_df.withColumn(
'B_split',
F.explode(F.split('B', ','))
).alias('s').join(
lookup_df.alias('l'),
F.expr('s.B_split = l.C'),
'left'
).drop('C').na.fill(
'EMPTY', ['D']
).groupBy(
source_df.columns
).agg(
F.concat_ws(',', F.collect_list('D')).alias('new_col')
)
result.show()
+---+-----+---+-----------+
| A| B| T| new_col|
+---+-----+---+-----------+
|foo|a,b,c|sam| h1,h2,h3|
|faz|b,a,f|sam|h2,h1,EMPTY|
|bar|k,a,c|bob|EMPTY,h1,h3|
+---+-----+---+-----------+
推荐阅读
- office365 - Office - js创建段落副本
- r - 将 R Markdown 渲染为 HTML 时出现“gregexpr 错误”
- android - 在边框中添加两种颜色(android)?
- angular - Angular 我无法从服务器获取图像
- mariadb - 在 MariaDB 上设置 innodb_tmpdir
- javascript - 在单击事件完成之前执行以下代码
- android - Android - 带有 ImageView、LRUcache 和 ViewHolder 的滞后 ListView
- c - 在 C 中创建井字游戏 - 数组不显示更改,不返回错误消息
- amazon-web-services - DynamoDB 记录大小随时间增加
- php - php错误处理可以成为HTML类的一部分吗