我正在尝试通过lambda函数传递多个条件语句在熊猫数据框中创建一个新列。
我的问题与以下问题非常相似:Lambda including if...elif...else 但是该解决方案似乎不适用于我的python(3.7)版本。
这是我到目前为止所拥有的:
在一个条件下,该方法有效:
ops['repair_location'] = ops['depot_name'].apply(lambda x: 'Field' if x == 'Field else 'Depot')
但是我想添加另一个条件。使用链接问题的解决方案:
ops['repair_location'] = ops['depot_name'].apply(lambda x: 'Field' if x == 'Field' else (x == 'Unknown Location' 'Unknown Location' else 'Depot'))
这将返回指向最后一个else
语句的语法错误。
答案 0 :(得分:2)
我们通常做np.select
s1=ops['depot_name']=='Field'
s2=ops['depot_name']=='Unknown Location'
ops['repair_location']=np.select([s1,s2],['Field','Unknown Location'],default='Depot')
答案 1 :(得分:2)
您可以使用np.where
import numpy as np
ops['repair_location'] = (
ops['depot_name']
.apply(lambda x: np.where(x=='Field', 'Field', np.where(x=='Unknown Location', 'Unknown Location', 'Depot')))
)