如何计算Pandas每天52周的高/低?

klh5stk1  于 2023-09-29  发布在  其他
关注(0)|答案(4)|浏览(101)

我有一个带有典型OHLC值的简单数据框。我想从它计算每日52周的高/低(或其他时间范围),并将结果放入数据框,以便我可以跟踪所有记录高/低的每日运动。
例如,如果时间范围仅为3天,则3天的最高/最低值为:(三天最高:最近3天内的最大“高”值)

Out[21]: 
             Open   High    Low  Close    Volume  3-Day-High 3-Day-Low 
Date                                                       
2015-07-01  273.6  273.6  273.6  273.6         0       273.6     273.6
2015-07-02  276.0  276.0  267.0  268.6  15808300       276.0     267.0
2015-07-03  268.8  269.0  256.6  259.8  20255200       276.0     256.6
2015-07-06  261.0  261.8  223.0  235.0  53285100       276.0     223.0
2015-07-07  237.2  237.8  218.4  222.0  38001700       269.0     218.4
2015-07-08  207.0  219.4  196.0  203.4  48558100       261.8     196.0
2015-07-09  207.4  233.8  204.2  233.6  37835900       237.8     196.0
2015-07-10  235.4  244.8  233.8  239.2  23299900       244.8     196.0

有没有简单的方法可以做到这一点,以及如何做到?谢谢你们!

ecbunoof

ecbunoof1#

上面的方法在最新版本的python中已经被替换了,请使用下面的方法:Series.rolling(min_periods=1,window=252,center=False).max()

2w2cym1i

2w2cym1i2#

你可以试试这个:

three_days=df.index[-3:]
maxHigh=max(df['High'][three_days])
minLow=min(df['Low'][three_days])
u4vypkhs

u4vypkhs3#

last_working_days = 252
Year_min = df[:-last_working_days].Low.min()
Year_max = df[:-last_working_days].High.max()
enxuqcxy

enxuqcxy4#

可以使用rolling_maxrolling_min

>>> df["3-Day-High"] = pd.rolling_max(df.High, window=3, min_periods=1)
>>> df["3-Day-Low"] = pd.rolling_min(df.Low, window=3, min_periods=1)
>>> df
             Open   High    Low  Close    Volume  3-Day-High  3-Day-Low
Date                                                                   
2015-07-01  273.6  273.6  273.6  273.6         0       273.6      273.6
2015-07-02  276.0  276.0  267.0  268.6  15808300       276.0      267.0
2015-07-03  268.8  269.0  256.6  259.8  20255200       276.0      256.6
2015-07-06  261.0  261.8  223.0  235.0  53285100       276.0      223.0
2015-07-07  237.2  237.8  218.4  222.0  38001700       269.0      218.4
2015-07-08  207.0  219.4  196.0  203.4  48558100       261.8      196.0
2015-07-09  207.4  233.8  204.2  233.6  37835900       237.8      196.0
2015-07-10  235.4  244.8  233.8  239.2  23299900       244.8      196.0

请注意,与您的示例一致,它使用最后三个 * 记录的日期 *,而不管这些行之间的间隔大小(例如07-03和07-06之间)。

相关问题