gpt4 book ai didi

python - 当值缺失时,将列值添加到另一列中的数组中

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:03 25 4
gpt4 key购买 nike

我有一个数据框,其中有一列包含一个数组列表,其中包含形式(键,分数)的结构,即下面的值列。此外,我还有另一个名为 item 的列,其中包含一个字符串。

root
|-- value: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- key: string (nullable = true)
| | |-- score: double (nullable = true)
|-- id: string (nullable = true)
|-- item: string (nullable = true)

当该项目不为空时,我想搜索数组列表以查看该项目是否存在于 value.key(s) 中。如果不存在,则将 (item, min) 追加到值列中的数组列表中。这里,min 是数组列表中分数的最小值。我需要保留 arraylist 中元素的顺序并将新结构附加到列表的末尾。

示例输入:

+-----------------------------------+------+------+
| value | id | item |
+-----------------------------------+------+------+
|[[e1, 0.4] , [e2, 0.3]] | 1 | e3 |
|[[e1, 0.4] , [e2, 0.3], [e3, 0.2]] | 2 | e4 |
|[[e1, 0.4] , [e2, 0.3]] | 3 | e1 |
|[[e1, 0.4] , [e2, 0.3]] | 4 | null |
+-----------------------------------+------+------+

示例输出:

+------------------------------------------------+------+------+
| value | id | item |
+------------------------------------------------+------+------+
|[[e1, 0.4] , [e2, 0.3], [e3, 0.3]] | 1 | e3 |
|[[e1, 0.4] , [e2, 0.3], [e3, 0.2], [e4, 0.2]] | 2 | e4 |
|[[e1, 0.4] , [e2, 0.3]] | 3 | e1 |
|[[e1, 0.4] , [e2, 0.3]] | 4 | null |
+------------------------------------------------+------+------+

如果我想将新的(键、分数)添加到列表中的特定位置,解决方案会有什么不同? (例如开始或中间)

最佳答案

您可以定义udf函数来实现它。

import pyspark.sql.functions as F
from pyspark.sql.types import StructType,StructField,ArrayType,StringType,DoubleType

def contains(values,item):
if not item:
return values
keys = [pair['key'] for pair in values]
if item not in keys:
scores = [pair['score'] for pair in values]
values.append({'key':item,'score':min(scores)})
return values

contains_udf = F.udf(contains,ArrayType(StructType([StructField('key', StringType()),
StructField('score', DoubleType())])))
df = df.withColumn("value", contains_udf('value','item'))
df.show(truncate = False)

+--------------------------------------------+---+----+
|value |id |item|
+--------------------------------------------+---+----+
|[[e1, 0.4], [e2, 0.3], [e3, 0.3]] |1 |e3 |
|[[e1, 0.4], [e2, 0.3], [e3, 0.2], [e4, 0.2]]|2 |e4 |
|[[e1, 0.4], [e2, 0.3]] |3 |e1 |
|[[e1, 0.4], [e2, 0.3]] |4 |null|
+--------------------------------------------+---+----+

关于python - 当值缺失时,将列值添加到另一列中的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56386490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com