python - 检查给定列表中的元素是否存在于 DataFrame 的数组列中

标签 python pandas apache-spark pyspark apache-spark-sql

我有以下适用于 pandas 数据框的函数

def event_list(df,steps):
    df['steps_present'] =  df['labels'].apply(lambda x:all(step in x for step in steps))
    return df

DataFrame 有一个名为 labels 的列,其值为列表。此函数接受数据帧和步骤(这是一个列表),并输出带有新列步骤的数据帧,如果参数列表中的所有元素都存在于数据帧列中

value in df['labels'] =  [EBBY , ABBY , JULIE , ROBERTS]

event_list(df,['EBBY','ABBY']) 将为该记录返回 True,因为 EBBY 和 ABBY 出现在数据帧列表列中。

我想在 pyspark 中创建类似的函数。

最佳答案

您可以使用array_except来检查所提供列表中的每个元素是否都出现在标签列中。如果是,则 array_except 结果的大小将为 0。将大小与 0 进行比较将得到您想要的 bool 值。

import pyspark.sql.functions as F

def event_list(df, steps):
    return df.withColumn(
        'steps_present', 
        F.size(F.array_except(F.array(*[F.lit(l) for l in steps]), 'labels')) == 0
    )

df2 = event_list(df, ["EBBY", "ABBY"])

df2.show(truncate=False)
+----------------------------+-------------+
|labels                      |steps_present|
+----------------------------+-------------+
|[EBBY, ABBY, JULIE, ROBERTS]|true         |
|[EBBY, JULIE]               |false        |
+----------------------------+-------------+

关于python - 检查给定列表中的元素是否存在于 DataFrame 的数组列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66912148/

相关文章:

python - 根据 for 循环中的迭代次数向列表添加不同的值

python - 如何制作 python 模块或函数并在编写其他程序时使用它?

Python 数据框 : Finding a value in same row as a defined value in a different column

python - 如何在 Matplotlib 中更改文本颜色?

python - 如何在 Django 中将一个 html 页面的值传递给另一个页面?

python - 如何校正和识别图像中的短文本

python - 按行和列获取单元格的值

apache-spark - docker-compose v3 + apache spark,端口 7077 上的连接被拒绝

apache-spark - Spark 窗口函数中的条件

scala - Spark hive udf : no handler for UDAF analysis exception