Home > Blockchain >  How to find Date of 52 Week High and date of 52 Week low using pandas dataframe (Python)?
How to find Date of 52 Week High and date of 52 Week low using pandas dataframe (Python)?

Time:06-15

Please refer below table to for reference

I was able to find 52 Week High and low using:

df = pd.read_csv(csv_file_name, engine='python')  
df['52W H'] = df['HIGH'].rolling(window=252, center=False).max()
df['52W L'] = df['LOW'].rolling(window=252, center=False).min()

Can someone please guide me how to find Date of 52 Week High and date of 52 Week low? Thanks in Advance.

CodePudding user response:

My guess is that the date is another column in the dataframe, assuming its name is 'Date'.

you can try something like

df = pd.read_csv(csv_file_name, engine='python')  
df['52W H'] = df['HIGH'].rolling(window=252, center=False).max()
df['52W L'] = df['LOW'].rolling(window=252, center=False).min()
df_low = df[df['LOW']== df['52W L'] ]
low_date = df_low['Date']

Similarly you can look for high values

Also it would have helped if you shared your sample dataframe structure.

CodePudding user response:

Used 'pandas_datareader' data. The index is reset first. Then, using the idxmax() and idxmin() functions, the indices of highs and lows are found and lists are created from these values. nan are replaced with 0. The index of the 'Date' column is again set. And lists with indexes are fed into df.index. High, Low replace with yours in df.

import pandas as pd
import pandas_datareader.data as web
import numpy as np


df = web.DataReader('GE', 'yahoo', start='2012-01-10', end='2019-10-09')

df = df.reset_index()
imax = df['High'].rolling(window=252, center=False).apply(lambda x: x.idxmax()).values
imin = df['Low'].rolling(window=252, center=False).apply(lambda x: x.idxmin()).values

imax = np.nan_to_num(imax).astype(int)
imin = np.nan_to_num(imin).astype(int)

df = df.set_index('Date')

df['52W H'] = df.index[imax]
df['52W L'] = df.index[imin]
  • Related