带和不带 lambda 的 pandas apply()

标签 pandas lambda apply

使用pandas 调用函数时的规则/过程是什么apply()通过 lambda 与否?下面的例子。显然没有 lambda,整个系列( df[column name] )被传递给“test”函数,该函数在尝试对系列进行 bool 运算时会抛出错误。

如果通过 lambda 调用相同的函数,它就可以工作。迭代每一行,每行作为“x”传递,df[列名] 返回当前行中该列的单个值。

这就像 lambda 正在删除一个维度。有人对此有解释或指向特定文档吗?谢谢。

使用 lambda 的示例 1,工作正常

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,在系列错误 上引发 bool 运算
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().

最佳答案

lambda 没有什么神奇之处.它们是一个参数中的函数,可以内联定义,并且没有名称。您可以在需要 lambda 的地方使用函数,但该函数还需要接受一个参数。你需要做一些像......

定义为:

def wrapper(x):
    return test(x['yTest'], x['yPred'])

将其用作:
probPredDF.apply(wrapper, axis=1)

关于带和不带 lambda 的 pandas apply(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810094/

相关文章:

python - 如何将行中的列值更新为 pandas 数据框中另一列中的特定值?

python - 如何使用 groupby 计算数据框中先前使用的产品数量?

python - 带有 DatetimeIndex 的 Pandas set_Value [Python]

Python:逐行替换数据帧值

r - emdist 段错误中的 emd2d 函数

python - 如何根据电子邮件 ID 获取行,其中计数为最大或最新日期

c# - 需要帮助以更好地理解最小起订量

c# - 使用 lambda 表达式参数调用泛型方法的反射

c# - 像在 C# linq 中一样在 Java 8 中获取匿名对象

R 在数据框中的每个单元格上应用函数