我有一个简单的数据帧,具有典型的OHLC值。我想从它计算每周52周的高/低(或其他时间范围),并将结果放入数据帧,以便我可以跟踪所有记录高/低的每日移动。
例如,如果时间范围仅为3天,则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
有什么简单的方法可以做到这一点以及如何做到这一点?谢谢你们!
答案 0 :(得分:4)
您可以使用rolling_max
和rolling_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之间)。 / p>
答案 1 :(得分:3)
上述方法已在最新版本的python中被替换 请改用: Series.rolling(min_periods = 1,window = 252,center = False).max()
答案 2 :(得分:0)
您可以尝试以下方法:
three_days=df.index[-3:]
maxHigh=max(df['High'][three_days])
minLow=min(df['Low'][three_days])