此代码有什么问题?我在数据帧上使用了许多比较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)
答案 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)