【发布时间】:2020-02-20 20:37:29
【问题描述】:
我有一个这样的数据框:
+-------+----------------+
|Name |Source |
+-------+----------------+
|Tom |clientA-incoming|
|Dick |clientB-incoming|
|Harry |c-abc-incoming |
我想添加一列 slug 来结束这个数据框:
+-------+----------------+--------+
|Name |Source |slug |
+-------+----------------+--------+
|Tom |clientA-incoming|clientA |
|Dick |clientB-incoming|clientB |
|Harry |c-abc-incoming |c-abc |
我有一个包含 slug 的值列表:
slugs = ['clientA', 'clientB', 'c-abc']
我基本上是按照这个伪代码的思路来思考的:
for i in slugs:
if i in df['Source']:
df['Slug'] = i
谁能帮我越过终点线?
编辑:
我想用slugs 列表中的值更新slug 列。进入slug 列的具体值是根据Source 列确定的。
例如,由于slugs[0] = 'clientA' 和clientA 是clientA-incoming 的子字符串,我想将slug 列中该行的值更新为clientA
【问题讨论】:
-
所以大概你会有一些不在
slugs中的行并且它们的长度不同? -
你想根据
Source列填充slug列吗?或来自slugs列表..? -
每一行在
slugs中都有对应的值,但slugs中的值会没有一行 -
@Shu 我想根据
Source中的值使用列表slugs中的数据填充slug -
使用带有
coalesce、contains、(或startswith)和when的列表组合来执行if-then-else 逻辑:类似于:df.withColumn('slug', coalesce(*[when(col('Source').contains(slug), lit(slug)) for slug in slugs]))
标签: python apache-spark pyspark aws-glue