如何编写一个依赖于两个变量(列)的条件lambda函数?

6 投票
3 回答
22150 浏览
提问于 2025-04-18 13:36

我有一个数据集,叫做df,里面有两个变量,x和y。我想写一个函数,做以下事情:

如果x大于100并且y小于50,就返回x,否则返回y。

我之前在STATA里做数据分析,所以对pandas还比较陌生。如果有帮助的话,在STATA里可以这样写:

把x的值替换为:如果x大于100并且y小于50,就用x的值,否则用y的值。

换句话说,这个函数是根据df中的两个列来决定的,会根据条件是否满足,从每一行中返回一个变量的值。

到目前为止,我一直在通过新函数创建新变量,比如:

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

我在StackOverflow和文档中找到的,都是如何对单个变量应用函数,或者对多个列使用轴选项。请帮帮我。

3 个回答

2

现在有一个非常简单的方法可以做到这一点。只需要在数据集上使用 apply 就可以了:

df['dummy'] = df.apply(lambda row: row['x'] if row['x'] > 100 and row['y'] < 50 else row['y'])
6

像这样:

f = lambda x, y: x if x>100 and y<50 else y

在Python中,Lambda表达式相当于普通的函数定义。

def f(x, y):
    return x if x>100 and y<50 else y

注意:Lambda的内容必须是一个有效的表达式。这意味着你不能使用像return这样的东西;Lambda会返回最后一个被计算的表达式。

如果想了解更多,可以看看:

14

使用 where

df['dummyVar '] = df['x'].where((df['x'] > 100) & (df['y'] < 50), df['y'])

这样做会比使用 apply 操作快很多,因为它是向量化的。

撰写回答