具有两个值的 lambda 不起作用,错误:<lambda>() 缺少 1 个必需的位置参数:"y")



我有一个数据框架:

data = {'key': ['one', 'two', 'zero'], 'cost': [300, 20, 500], 'leads': [20, 0, 50]} 
data = pd.DataFrame(data=data)

我想通过如下的函数来计算新值:

def cpl_calc(x, y):
if x == 0:
cpl = y
else: 
cpl = y / x
print(cpl)

当我尝试这样数数时:

data['cpl'] = data[['cost', 'leads']].apply(lambda x, y: cpl_calc(x, y))

我看到以下错误TypeError:()缺少1个必需的位置参数:'y'

如何使公式正确地计算新值?

正如@Corralien所说,您最好将其矢量化。看看答案。但要了解如何通过apply()函数实现这一点,您可以:

def cpl_calc(x):
if x['cost'] == 0:
cpl = x['leads']
else: 
cpl = x['leads'] / x['cost']

return cpl
data.apply(cpl_calc, axis=1)
0    0.066667
1    0.000000
2    0.100000

在您的情况下,您可以使用向量化:

data['cost'].where(data['leads'] == 0, other=data['leads'] / data['cost'])
print(data)
# Output
key  cost  leads        cpl
0   one   300     20   0.066667
1   two    20      0  20.000000
2  zero   500     50   0.100000

相关内容

最新更新