Using a IF statement in a DataFrame and getting an error: The truth value of a Series is ambiguous

Using a IF statement in a DataFrame and getting an error: The truth value of a Series is ambiguous

我有一个股票价格的数据框和 returns 从雅虎金融导入如下。

Date price return
2019-01-01 54 0.05
2019-02-01 46 -0.14
2019-03-01 48 0.04

其中日期是索引,return 是数字。

我正在尝试创建一个新列,如果第二天的 return 为正,则 will = 等于 1,如果以下 return 为负,则等于 -1。

我用过

if df['return'].shift(-1) > 0:
  df['Indicator'] = 1
else 
  df['Indicator'] = -1

但是,我收到上述错误。我试过使用 .all() 但这会使所有指标列都等于 1。即使第二天的 return 为负

所需的输出将是

Date price return indicator
2019-01-01 54 0.05 -1
2019-02-01 46 -0.14 1
2019-03-01 48 0.04 1

指标栏最后1假设return次日,2019-04-01为正。

有什么建议吗?

谢谢

使用 numpy where 函数。它更有效和简单:

import numpy as np
df['Indicator'] = np.where(df['return'].shift(-1)>0,1,-1 )

我认为是这样的:

df['Indicator'] = df['return'].shift(-1).apply(lambda x: 1 if x > 0 else -1)