根据另一列的值将函数应用于具有不同参数的行熊猫数据框

时间:2019-02-21 16:21:33

标签: python pandas dataframe

我有一个数据框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))

当然不起作用:)不知道为什么以及如何使其起作用?

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