【问题标题】:Case Condition in Python PandasPython Pandas 中的案例条件
【发布时间】: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


    【解决方案1】:

    您的 func 将 row 作为参数,但未使用。所有 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-07-30
      • 2011-10-25
      • 2016-08-04
      相关资源
      最近更新 更多