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)
我有一个股票价格的数据框和 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)