I have a data frame of stock prices and returns imported from yahoo finance as below.
| Date | price | return |
|---|---|---|
| 2019-01-01 | 54 | 0.05 |
| 2019-02-01 | 46 | -0.14 |
| 2019-03-01 | 48 | 0.04 |
where date is the index and the return is numeric.
I am trying to create a new column with will = equal 1 if the return on the following day is positive and equal -1 if the following return is negative.
I have used
if df['return'].shift(-1) > 0:
df['Indicator'] = 1
else
df['Indicator'] = -1
However, I get the afformentioned error. I have tried using .all() but this makes all of the indicator column equal to 1. even when the return on the following day is negative
The desired output would be
| 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 |
The last 1 in the indicator column is assuming the return the following day, 2019-04-01 is positive.
Any advice?
Thank you
CodePudding user response:
Use the numpy where function. Its more effective and simple:
import numpy as np
df['Indicator'] = np.where(df['return'].shift(-1)>0,1,-1 )
CodePudding user response:
This would do I think:
df['Indicator'] = df['return'].shift(-1).apply(lambda x: 1 if x > 0 else -1)
