簡體   English   中英

檢查給定列表中的元素是否存在於 DataFrame 的數組列中

[英]To check if elements in a given list present in array column in DataFrame

我有以下 function 適用於 pandas dataframe

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

DataFrame 有一個名為標簽的列,其值為列表。 This function accepts dataframe and steps(which is a list) and outputs dataframe with a new column Steps present if all the elements in parameter list present in the dataframe column

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

event_list(df,['EBBY','ABBY'])將為該記錄返回 True,因為 EBBY 和 ABBY 存在於 dataframe 列表列中。

我想在 pyspark 中創建一個類似的 function。

您可以將 function 轉換為 UDF,可能如下所示,它可以工作。

from pyspark.sql.functions import lit, array

values = [(["EBBY" , "ABBY" , "JULIE" , "ROBERTS"],),
           (["EBBY" , "ABBY"],)]
columns = ['labels']
df = spark.createDataFrame(values, columns)

@udf
def event_list(column_to_test, input_values):
    return all(value in column_to_test for value in input_values)

steps = ["EBBY", "JULIE"]
df.withColumn("steps_present", event_list(df['labels'], array([lit(x) for x in steps]))).show(truncate=False)

在此處輸入圖像描述

您可以使用array_except檢查提供的列表中的每個元素是否存在於標簽列中。 如果是,則array_except結果的大小將為 0。將大小與 0 進行比較將為您提供所需的 Boolean 值。

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        |
+----------------------------+-------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM