我有一个数据框df
import pandas
df = pandas.DataFrame(data=[[1,True],[2,False]],columns=['A','decide'])
我要根据决策列的值将功能fun
应用于哪些行
def fun(case,var):
case = case + var
return case
df=df.apply(lambda x: fun(x,1) if x['decide'] else fun(x,2))
当然不起作用:)不知道为什么以及如何使其起作用?
答案 0 :(得分:4)
IIUC,您可以使用np.where
:
df['A'] = np.where(df.decide, df.A+1, df.A+2)
A decide
0 2 True
1 4 False
答案 1 :(得分:4)
尝试修复您的代码,PS:您忘记添加axis=1
df.apply(lambda x: fun(x['A'],1) if x['decide'] else fun(x['A'],2),axis=1)
Out[560]:
0 2
1 4
dtype: int64
此外,当您使用np.where
时,您仍然可以传递自己定义的函数
np.where(df.decide,fun(df.A,1),fun(df.A,2))
如果您的逻辑像您在示例函数中向我们展示的那样简单
df.A+2-df.decide
Out[563]:
0 2
1 4
dtype: int64