Python中的Case条件
我试图在python中实现一个case条件 Sql等价物如下所示-Python中的Case条件,python,python-3.x,pandas,case,Python,Python 3.x,Pandas,Case,我试图在python中实现一个case条件 Sql等价物如下所示- case when entered_by = created_by_user then entered_by when entered_by = entered_by then entered_by when modified_by = created_by_user then modified_by when modified_by = entered_b
case when entered_by = created_by_user then entered_by
when entered_by = entered_by then entered_by
when modified_by = created_by_user then modified_by
when modified_by = entered_by then modified_by
end as "AD_ID"
我已经编写了下面的pandas代码来实现上述功能,但是出现了一个错误-
def func(row):
if dftemp['entered_by'] == dftemp['created_by_user']:
return dftemp['entered_by']
elif dftemp['entered_by'] == dftemp['entered_by']:
return dftemp['entered_by']
elif dftemp['modified_by'] == dftemp['created_by_user']:
return dftemp['modified_by']
elif dftemp['modified_by'] == dftemp['entered_by']:
return dftemp['modified_by']
else:
return 'other'
dftemp['AD_ID'] = dftemp.apply(func, axis=1)
我得到下面的错误-
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 0')
有没有更好的方法实现同样的目标
谢谢
@驴子孔-我尝试了下面的,没有工作-
def func(row):
if assert_series_equal(dftemp['entered_by'], dftemp['created_by_user']):
return dftemp['entered_by']
elif assert_series_equal(dftemp['entered_by'], dftemp['entered_by']):
return dftemp['entered_by']
elif assert_series_equal(dftemp['modified_by'], dftemp['created_by_user']):
return dftemp['modified_by']
elif assert_series_equal(dftemp['modified_by'], dftemp['entered_by']):
return dftemp['modified_by']
else:
return 'other'
dftemp['AD_ID'] = dftemp.apply(func, axis=1)
func将行作为参数,但不使用它。所有dftemp变量都应为row。此外,我认为这更干净:
def func(row):
if assert_series_equal(row.entered_by in [row.created_by_user, row.entered_by]):
return dftemp.entered_by
if assert_series_equal(row.modified_by in [row.created_by_user, row.entered_by]):
return dftemp.modified_by
return 'other'