我正在尝试将函数逐行应用于PANDAS
df.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1)这个想法是只将函数应用于var1的值为123的行。但是当我运行这个语句时,它仍然尝试运行数据框中的每一行。
i am trying to apply a function row-wise to a PANDAS with the following
df.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1)the idea is to apply the function only to rows where value of var1 is 123. but when i run this statement, it still try to run every single row in the dataframe.
最满意答案
我相信你需要双方的过滤器:
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 3I believe you need filter in both sides:
mask = df.var1==123 df.loc[mask, 'coltoChange']=df[mask].apply(lambda row: myfunc(row.var1, row.var2),axis=1)Sample:
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如何将lambda函数应用于符合PANDAS条件的特定行(how to apply lambda functions to specific rows meeting a condition in PANDAS)我正在尝试将函数逐行应用于PANDAS
df.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1)这个想法是只将函数应用于var1的值为123的行。但是当我运行这个语句时,它仍然尝试运行数据框中的每一行。
i am trying to apply a function row-wise to a PANDAS with the following
df.loc[df.var1==123,'coltoChange']=df.apply(lambda row: myfunc(row.var1, row.var2),axis=1)the idea is to apply the function only to rows where value of var1 is 123. but when i run this statement, it still try to run every single row in the dataframe.
最满意答案
我相信你需要双方的过滤器:
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 3I believe you need filter in both sides:
mask = df.var1==123 df.loc[mask, 'coltoChange']=df[mask].apply(lambda row: myfunc(row.var1, row.var2),axis=1)Sample:
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
发布评论