繁体   English   中英

Pandas df.apply()

[英]Pandas df.apply()

我有一个df:

test2= pd.DataFrame({
            'A':[1, 2, 3],
            'B':[4, 5, 6],
            'C':[7, 8, 9] })

我写了一个简单的 function 为:

def add(a,b,c):
    return a+b+c

现在我在我的 df 中使用这个 function 使用 pandas df.apply 方法:

test2.apply(add(test2['A'], test2['B'], test2['C']),axis=1)

它给了我一个错误,说ValueError:一个系列的真值是模棱两可的。 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

但是当我将代码修改为:

test2.apply(lambda df: add(df['A'],df['B'],df['C']),axis=1)

它工作得很好,给了我预期的结果:

0 12
1 15
2 18

我的问题是,当我事先已经定义了 function 时,为什么还需要 lambda 表达式?

这是因为apply期望 function 应用于DataFrameSeries 如果您在传递给它的三个Series对象上调用add ,则根本不需要再调用apply 这是因为加法已经适用于Series对象。 但是,并不是每个 function 都可以这样应用,这就是apply的用途。

您收到的错误是由于您正在传递一个Series ,而它需要一个 function。

更改您的签名 function:

def add(row):
    return sum(row)

out = test2.apply(add, axis=1)
print(out)

# Output:
0    12
1    15
2    18
dtype: int64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM