如何从 OHLC 数据计算枢轴值

How to calculate pivot value from OHLC data

我有一个 pandas 数据集,其中包含开盘价、最高价、最低价、收盘价和关键列。现在我想按键对数据集进行分组,并使用公式 - (high + low + close) / 3 计算 pivot。至此我可以做到。但要求是将计算的数据转移到我无法编码的下一组。

我能够按键列对数据集进行分组并能够计算数据透视表。

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

而不是 3 角钱 groupby 使用新列的 GroupBy.agg with dictionary, then sum values per rows and divide 3. Last use Series.map with Series.shifted 值:

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