2015-08-13 1 views
1

У меня есть простой фрейм данных с типичными значениями OHLC. Я хочу рассчитать ежедневный 52-недельный максимум/низкий (или другой временной диапазон) от него и поместить результат в кадр данных, чтобы я мог отслеживать ежедневное движение всей записи с высоким/низким уровнем.Как рассчитать ежедневные 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 

Есть ли простой способ сделать это и как? Спасибо, парни!

ответ

2

Вы можете использовать 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).

0

Описанный выше метод был заменен в последних версиях питона Используйте вместо этого: Series.rolling (min_periods = 1, окно = 252, центр = False) .max()

Смежные вопросы