如何编写一个以python中的两个变量(列)为条件的lambda函数

see*_*spi 6 python lambda conditional multiple-columns pandas

我有一个数据集,df,有两个变量,x和y.我想编写一个执行以下操作的函数:

x如果x> 100且y <50,则为y

我习惯于在STATA中进行数据分析,因此我对数据分析的熊猫相对较新.如果它有帮助,在stata中它看起来像:

替换x = cond(x> 100&y <50,x,y)

换句话说,该函数以df中的两列为条件,并且将根据条件是否满足从每个行中的一个变量或另一个变量返回一个值.

到目前为止,我一直在通过以下新功能创建新变量:

df.dummyVar = df.x.apply(lambda x:1,如果x> 100,则为0)

使用StackOverflow和文档我只能找到如何将依赖于单个变量的函数应用于多个列(使用axis选项).请帮忙.

EdC*_*ica 12

用途where:

df['dummyVar '] = df['x'].where((df['x'] > 100) & (df['y'] < 50), df['y'])
Run Code Online (Sandbox Code Playgroud)

这将比执行应用操作快得多,因为它是矢量化的.


Jam*_*lls 6

像这样:

f = lambda x, y: x if x>100 and y<50 else y
Run Code Online (Sandbox Code Playgroud)

Python中的Lambda等同于普通的函数定义.

def f(x, y):
    return x if x>100 and y<50 else y
Run Code Online (Sandbox Code Playgroud)

注意: Lambda的主体必须是有效的表达式.这意味着您不能使用以下内容:return例如; Lambda将返回评估的最后一个表达式.

对于一些好的阅读,请看: