我有两列 - Punchout 和 Contract。 我想要一个目录标志列,如果 Punchout 和 Contract 都是 NAN,则它为 FALSE,否则为 TRUE。 我写了以下一段代码:
val result = dfA.as("a")
.withColumn("keys", array(dfA.columns.map(col): _*))
.join(
dfB.as("b"),
array_contains(col("keys"), col("b.Key"))
).groupBy("a.Key")
.agg(
concat_ws(",", collect_list(col("data"))).as("data")
)
result.show
//+----+-----------+
//| Key| data|
//+----+-----------+
//|ALK1|G1,G3,G4,G5|
//|ALK2|G2,G6,G7,G8|
//+----+-----------+
但它抛出的错误是:req_line['Catalog_Flag'] = np.where((req_line['Contract']) & (req_line['Punchout']) = '[]',False,True)
还有别的办法吗?请帮忙!
样本数据
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
答案 0 :(得分:3)
这里 np.where
不是必需的,只需将 ~
用于带 Series.isna
的反转掩码:
req_line['Catalog_Flag'] = ~(req_line['Contract'].isna() & req_line['Punchout'].isna())
使用 |
按位 OR
by Series.notna
测试是否没有缺失值:
req_line['Catalog_Flag'] = req_line['Contract'].notna() | req_line['Punchout'].notna()
print (req_line)
Contract Punchout Flag Catalog_Flag
0 NaN NaN False False
1 NaN Computer Information True True
2 Non-CLM0_Cat_01 NaN True True
答案 1 :(得分:2)
使用 Series.isna
来标识 nan
:
req_line['Catalog_Flag'] = np.where(req_line['Contract'].isna() & req_line['Punchout'].isna(), False, True)