我正在尝试使用以下
将行函数逐行应用于PANDASdf.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1)
这个想法是将函数仅应用于var1的值为123的行。但是当我运行此语句时,它仍然尝试运行数据帧中的每一行。
答案 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