【发布时间】:2015-03-30 16:43:14
【问题描述】:
我正在尝试在 python pandas 中实现 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_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')
有没有更好的方法来达到同样的效果?
谢谢。
@Donkey Kong - 我尝试了以下方法,但没有用 -
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)
【问题讨论】:
标签: python python-3.x pandas case