通过lambda而不是pandas apply()
调用函数时,规则/进程是什么?以下示例。显然没有lambda,整个系列(df [列名])被传递给"测试"尝试对系列执行布尔操作时抛出错误的函数。
如果通过lambda调用相同的函数,它就可以工作。对每一行进行迭代,每次都传递为" x"并且df [column name]返回当前行中该列的单个值。
就像lambda正在移除一个维度。任何人都有解释或指向具体的文件吗?感谢。
示例1使用lambda,工作正常
print("probPredDF columns:", probPredDF.columns)
def test( x, y):
if x==y:
r = 'equal'
else:
r = 'not equal'
return r
probPredDF.apply( lambda x: test( x['yTest'], x[ 'yPred']), axis=1 ).head()
示例1输出
probPredDF columns: Index([0, 1, 'yPred', 'yTest'], dtype='object')
Out[215]:
0 equal
1 equal
2 equal
3 equal
4 equal
dtype: object
没有lambda的示例2,对系列错误抛出布尔操作
print("probPredDF columns:", probPredDF.columns)
def test( x, y):
if x==y:
r = 'equal'
else:
r = 'not equal'
return r
probPredDF.apply( test( probPredDF['yTest'], probPredDF[ 'yPred']), axis=1 ).head()
示例2输出
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:5)
lambda
没有什么神奇之处。它们是一个参数中的函数,可以内联定义,也没有名称。您可以使用需要lambda的函数,但该函数还需要一个参数。你需要做一些像......
将其定义为:
def wrapper(x):
return test(x['yTest'], x['yPred'])
将其用作:
probPredDF.apply(wrapper, axis=1)