Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to get the previous rows close and apply it to the next row in a new column called previous close

I have a bunch of daily ohlc data like so:

date,volume,open,close,high,low
2022-05-02,1756159.0,118.38,119.57,120.34,116.49
2022-05-03,3217838.0,119.72,122.4,123.98,119.09
2022-05-04,2460350.0,121.69,126.3,126.69,121.44
2022-05-05,2123645.0,124.62,122.15,125.21,120.8
2022-05-06,1629034.0,120.88,121.08,121.88,118.0
2022-05-09,1861704.0,119.13,113.11,119.13,112.64
2022-05-10,2141753.0,115.44,116.64,117.94,113.14
2022-05-11,1607013.0,115.7,113.99,118.0,113.84
2022-05-12,1338023.0,113.61,116.13,116.25,112.78
2022-05-13,1328411.0,117.38,119.38,120.715,117.27

I want to return a new dataframe which contains a new column called previous close, which will be set to the close of the previous day.

I’ve tried:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

     final_df.loc[0, 'previous close'] = final_df.loc[0, 'c']

        for i in range(1, len(df)):
            final_df.loc[i, 'previouse close'] = df.loc[i-1, 'c']

And using np.where() but I’ve had no luck. Here’s an example of how I need it to look:

|------------|-----------|--------|--------|---------|--------|----------------|
| date       | volume    | open   | close  | high    | low    | previous close |
|------------|-----------|--------|--------|---------|--------|----------------|
| 2022-05-02 | 1756159.0 | 118.38 | 119.57 |  120.34 | 116.49 |                |
|------------|-----------|--------|--------|---------|--------|----------------|
| 2022-05-03 | 3217838.0 | 119.72 |  122.4 |  123.98 | 119.09 |         119.57 |
|------------|-----------|--------|--------|---------|--------|----------------|
| 2022-05-04 | 2460350.0 | 121.69 |  126.3 |  126.69 | 121.44 |         122.4  |
|------------|-----------|--------|--------|---------|--------|----------------|
| 2022-05-05 | 2123645.0 | 124.62 | 122.15 |  125.21 |  120.8 |         126.3  |
|------------|-----------|--------|--------|---------|--------|----------------|
| 2022-05-06 | 1629034.0 | 120.88 | 121.08 |  121.88 |  118.0 |        122.15  |
|------------|-----------|--------|--------|---------|--------|----------------|

>Solution :

You can use Series.shift

df['previous close'] = df['close'].shift()

If you want to fill the row only when date difference is exactly 1 day

df['date'] = pd.to_datetime(df['date'])
df['previous close'] = df['close'].shift().mask(df['date'].diff().ne(pd.Timedelta(days=1)), pd.NA)
print(df)

        date     volume    open   close     high     low  previous close
0 2022-05-02  1756159.0  118.38  119.57  120.340  116.49             NaN
1 2022-05-03  3217838.0  119.72  122.40  123.980  119.09          119.57
2 2022-05-04  2460350.0  121.69  126.30  126.690  121.44          122.40
3 2022-05-05  2123645.0  124.62  122.15  125.210  120.80          126.30
4 2022-05-06  1629034.0  120.88  121.08  121.880  118.00          122.15
5 2022-05-09  1861704.0  119.13  113.11  119.130  112.64             NaN
6 2022-05-10  2141753.0  115.44  116.64  117.940  113.14          113.11
7 2022-05-11  1607013.0  115.70  113.99  118.000  113.84          116.64
8 2022-05-12  1338023.0  113.61  116.13  116.250  112.78          113.99
9 2022-05-13  1328411.0  117.38  119.38  120.715  117.27          116.13
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading