Pandas 如何将lambda函数应用于满足条件的行

Pandas 如何将lambda函数应用于满足条件的行,pandas,lambda,Pandas,Lambda,我正在尝试将函数按行应用于pandas数据帧,如下所示 df.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1) 其思想是仅将该函数应用于var1的值为123的行。但是,当我运行此语句时,它仍然会尝试运行数据帧中的每一行。我相信您需要在两侧进行筛选: mask = df.var1==123 df.loc[mask, 'coltoChange']=df[mask].appl

我正在尝试将函数按行应用于pandas数据帧,如下所示

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

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

我相信您需要在两侧进行筛选:

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

myfunc
在做什么?我问这个问题是因为apply可能是这里使用的错误函数。我必须简化它。我的数据框有数百万行的日期范围。因此,我根据行值及其日期运行randomforestregressor predict。运行需要很长时间,但我不知道如何“矢量化”它