Dataframe 当Pyspark数据帧中出现条件时

Dataframe 当Pyspark数据帧中出现条件时,dataframe,pyspark,.when,Dataframe,Pyspark,.when,我有下面的数据框 Column_1 Column_2 Column_3 A 1 A 2 A 3 A 4 A 5 B 1 B 4 B 5 C 1 C 2 我必须根据第1列和第2列中的值填充第3列。 如果列_1在('A','B')中,列_2不在('1','3',

我有下面的数据框

Column_1     Column_2       Column_3
A            1
A            2
A            3
A            4
A            5
B            1
B            4
B            5
C            1
C            2
我必须根据第1列和第2列中的值填充第3列。 如果列_1在('A','B')中,列_2不在('1','3','5'),我必须用X或Y填充列_3

预期产出:

Column_1     Column_2       Column_3
A            1              Y
A            2              X
A            3              Y
A            4              X
A            5              Y
B            1              Y            
B            4              X
B            5              Y
C            1              Y
C            2              Y
我尝试的是:

我尝试了when和other语句,但不确定如何使用not-in和when语句。
非常感谢您在这方面提供的任何帮助

您可以利用
isin
和反向
~

import pyspark.sql.functions as F

c = (F.when(df['Column_1'].isin(['A','B']) & 
      (~df['Column_2'].isin([1,3,5])),'X').otherwise('Y'))
df.withColumn("Column_3",c).show()
或:


更多详情:

df['Column_1'].isin(['A','B'])
#Column<b'(Column_1 IN (A, B))'>
~df['Column_2'].isin([1,3,5])
#Column<b'(NOT (Column_2 IN (1, 3, 5)))'>
df['Column_1'].isin(['A','B'])
#纵队
~df['Column_2'].isin([1,3,5])
#纵队
+--------+--------+--------+
|Column_1|Column_2|Column_3|
+--------+--------+--------+
|       A|       1|       Y|
|       A|       2|       X|
|       A|       3|       Y|
|       A|       4|       X|
|       A|       5|       Y|
|       B|       1|       Y|
|       B|       4|       X|
|       B|       5|       Y|
|       C|       1|       Y|
|       C|       2|       Y|
+--------+--------+--------+
df['Column_1'].isin(['A','B'])
#Column<b'(Column_1 IN (A, B))'>
~df['Column_2'].isin([1,3,5])
#Column<b'(NOT (Column_2 IN (1, 3, 5)))'>