将lambda应用于多列处理时语法错误无效

时间:2016-06-11 12:05:55

标签: python lambda

我有以下代码,应该将0或1放入INDICATOR列,具体取决于if-then规则(列TS的值):

rawdata_base['INDICATOR'] = rawdata_base.apply(lambda row: 
                                   '1' if row['T']=='2' and str(row['S']).isdigit() and int(row['S'])<15 
                                   else '0' if row['T']=='2' and str(row['S']).isdigit() and int(row['S'])>=15
                                   else '1' if row['T']=='1' and str(row['S']).isdigit() and int(row['S'])<35 
                                   else '0' if row['T']=='1' and str(row['S']).isdigit() and int(row['S'])>=35
                                   else '0' if 'A' in row['S']
                                   else '0', axis 1)

我无法弄清楚为什么错误invalid syntax会弹出else '0', axis 1

3 个答案:

答案 0 :(得分:1)

你不能在python中堆栈这样的条件。三元条件运算符只能接受3个输入(因此三元组):a if b else c

如果你想叠加它们,那么我不认为你想要lambda。自己动手:

def myfunc(row):
    if row['T']=='2' and str(row['S']).isdigit() and int(row['S'])<15:
        return '1'
    elif row['T']=='2' and str(row['S']).isdigit() and int(row['S'])>=15:
        return '0'
    ...

然后在.apply函数中,传递myfunc

答案 1 :(得分:1)

你遗失了&#39; =&#39;。应该是&#39;轴= 1&#39;不是&#39;轴1&#39;

答案 2 :(得分:0)

正如@gipsy所提到的,其中一个错误是缺少=axis=1)。但是,主要错误是在此代码行str

中错过了elif 'A' in str(row['S']):