Shw*_*ble 1 if-statement conditional-statements dataframe pyspark
我正在尝试一个简单的代码,在索引之后将数据框中的分类变量折叠为二进制类,目前我的列有3个类 - "A","B","C"我正在编写一个简单的if else语句来折叠类
def condition(r):
if (r.wo_flag=="SLM" or r.wo_flag=="NON-SLM"):
r.wo_flag="dispatch"
else:
r.wo_flag="non_dispatch"
return r.wo_flag
df_final=df_new.map(lambda x: condition(x))
Run Code Online (Sandbox Code Playgroud)
它不工作它不理解其他条件
|MData|Recode12|Status|DayOfWeekOfDispatch|MannerOfDispatch|Wo_flag|PlaceOfInjury|Race|
M| 11| M| 4| 7| C| 99| 1 |
M| 8| D| 3| 7| A| 99| 1 |
F| 10| W| 2| 7| C| 99| 1 |
M| 9| D| 1| 7| B| 99| 1 |
M| 8| D| 2| 7| C| 99| 1 |
Run Code Online (Sandbox Code Playgroud)
这是样本数据
试试这个 :
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf
def modify_values(r):
if r == "A" or r =="B":
return "dispatch"
else:
return "non-dispatch"
ol_val = udf(modify_values, StringType())
new_df = df.withColumn("wo_flag",ol_val(df.wo_flag))
Run Code Online (Sandbox Code Playgroud)
你做错了什么:
由于使用了用户定义函数 (UDF),接受的答案不是很有效。
我想大多数人都在寻找when.
from pyspark.sql.functions import when
matches = df["wo_flag"].isin("SLM", "NON-SLM")
new_df = df.withColumn("wo_flag", when(matches, "dispatch").otherwise("non-dispatch"))
Run Code Online (Sandbox Code Playgroud)