Как рассчитать значение разворота по данным OHLC - PullRequest
2 голосов
/ 20 мая 2019

У меня есть набор данных pandas с открытым, высоким, низким, закрытым и ключевым столбцом. Теперь я хочу сгруппировать набор данных по ключу и рассчитать пивот по формуле - (максимум + минимум + закрытие) / 3. До этого я мог это сделать. Но требование состоит в том, чтобы переместить вычисленные данные в следующую группу, которую я не могу закодировать.

Я могу сгруппировать набор данных по ключевому столбцу и рассчитать сводные данные.

import pandas as pd
data = pd.DataFrame([[110, 115, 105, 111, 1],[11, 16, 6, 12, 1],[12, 17, 7, 13, 1],[12, 16, 6, 11, 2],[9, 13, 4, 13, 2],[13, 18, 9, 12, 3],[14, 16, 10, 13, 3]], columns=["open","high","low","close","key"])
data['p'] = (data.high.groupby(data.key).transform('max') + data.low.groupby(data.key).transform('min') + data.close.groupby(data.key).transform('last')) / 3
print(data)

В настоящее время я получаю ниже вывода.

   open  high  low  close  key      p
0   110   115  105    111    1  44.666667
1    11    16    6     12    1  44.666667
2    12    17    7     13    1  44.666667
3    12    16    6     11    2  11.000000
4     9    13    4     13    2  11.000000
5    13    18    9     12    3  13.333333
6    14    16   10     13    3  13.333333

Но после смещения значения в следующую группу ожидаемый результат должен быть таким, как указано ниже.

   open  high  low  close  key      p
0   110   115  105    111    1     NaN
1    11    16    6     12    1     NaN
2    12    17    7     13    1     NaN
3    12    16    6     11    2  44.666667
4     9    13    4     13    2  44.666667
5    13    18    9     12    3  11.000000
6    14    16   10     13    3  11.000000

1 Ответ

0 голосов
/ 20 мая 2019

Вместо 3-х центовых групп используйте GroupBy.agg со словарем, затем sum значения на строки и делите 3. Последнее использование Series.map с Series.shift редактируемые значения для нового столбца:

s = data.groupby('key').agg({'low':'min','high':'max','close':'last'}).sum(axis=1) / 3

data['s'] = data['key'].map(s.shift())
print(data)
   open  high  low  close  key          s
0   110   115  105    111    1        NaN
1    11    16    6     12    1        NaN
2    12    17    7     13    1        NaN
3    12    16    6     11    2  44.666667
4     9    13    4     13    2  44.666667
5    13    18    9     12    3  11.000000
6    14    16   10     13    3  11.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...