根据字符串检查条件添加新列的最佳方法是什么
如果开始使用一些定义的值,则必须使用现有列值创建新列:
|deliveryname|department|state|salary|
+-------------+----------+-----+------+
| LA| Sales| NY| 90000|
| Austin| Sales| NY| 86000|
| Robert| Sales| CA| 81000|
| Snooze | Finance| CA| 90000|
| MidWest| Finance| NY| 83000|
| Jeff| Marketing| CA| 80000|
df= df.withColumn("DeliveryPossible",when(df.deliveryname.startswith(s) for s in (('LO - ','Austin','MidWest','San Antonios', 'Snooze ea')),'True').otherwise('False'))
或
values = ['LO - ','Austin','MidWest','San Antonios', 'Snooze ea']
df.withColumn("DeliveryPossible",when(df.company_name.startswith(s) for s in values ,'True').otherwise('False')).show()
所需输出:
|deliveryname|department|state|salary|DeliveryPossible
+-------------+----------+-----+------+
| LA| Sales| NY| 90000|False
| Austin| Sales| NY| 86000|True
| Robert| Sales| CA| 81000|False
| Snooze | Finance| CA| 90000|True
| MidWest| Finance| NY| 83000|True
| Jeff| Marketing| CA| 80000|False
我在两者中都得到了相同的错误,我想我漏掉了括号,但不知道该放在哪里。这样做正确吗?
Generator表达式如果不是唯一参数,则必须加括号。
感谢
df.startswith()
只接受一个字符串作为其参数。您需要单独设置这些条件,并使用"OR"组合它们。
from functools import reduce
from operator import or_
values = ['LO - ','Austin','MidWest','San Antonios', 'Snooze ea']
df.withColumn("DeliveryPossible",
reduce(or_, [df.company_name.startswith(s) for s in values])
).show()