系列的真相是模棱两可的熊猫

时间:2018-07-21 10:03:01

标签: python pandas

此代码有什么问题?我在数据帧上使用了许多比较lambda函数,但是此函数返回ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 2')错误。

我搜索了一下,发现之前有很多问题要问,但是没有一个适合我的问题。

我的代码:

def Return(close,pClose):
    i = ((close - pClose) / close) * 100
    if (i > 0):
        return 1
    if (i < 0):
        return 0

df['return'] = df.apply(lambda y:Return(close=df['Close'], pClose=df['pClose']),axis=1)

1 个答案:

答案 0 :(得分:2)

代码的问题是将数据框的整个列传递给函数:

df.apply(lambda y:Return(close=df['Close'], pClose=df['pClose']),axis=1)

在函数中,您正在计算一个新值i,该值实际上是一列:

i = ((close - pClose) / close) * 100

在比较语句中,由于它将列作为输入,因此无法决定如何评估您要执行的操作:

if (i > 0):

所以我认为您想要的是这样的

df['return'] = df.apply(lambda y:Return(close=y['Close'], pClose=y['pClose']),axis=1)