2015-03-30 4 views
0

Я пытаюсь реализовать условие case в python pandas.Состояние случая в Python Pandas

Эквивалент 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" 

Я написал код ниже панд для достижения выше, но получить в error-

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) 

ответ

1

Ваш FUNC принимает грести в качестве параметра, но он не используется. Все переменные dftemp должны быть строковыми. Кроме того, я считаю, что это чище:

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' 
Смежные вопросы