如何将lambda函数应用于满足PANDAS条件的特定行

时间:2018-01-06 17:14:44

标签: pandas lambda

我正在尝试使用以下

将行函数逐行应用于PANDAS
df.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1)

这个想法是将函数仅应用于var1的值为123的行。但是当我运行此语句时,它仍然尝试运行数据帧中的每一行。

1 个答案:

答案 0 :(得分:2)

我相信你需要双方过滤:

mask = df.var1==123
df.loc[mask, 'coltoChange']=df[mask].apply(lambda row: myfunc(row.var1, row.var2),axis=1)

样品:

df = pd.DataFrame({'var1':[123,123,3],
                   'var2':[3,4,5],
                   'var3':[1,2,3],
                   'coltoChange':[2,4,5]})

def myfunc(x,y):
    #sample function
    return x + y

mask = df.var1==123
df.loc[mask, 'coltoChange']=df[mask].apply(lambda row: myfunc(row.var1, row.var2),axis=1)
print (df)
   coltoChange  var1  var2  var3
0          126   123     3     1
1          127   123     4     2
2            5     3     5     3