【问题标题】:How to calculate pivot value from OHLC data如何从 OHLC 数据计算枢轴值
【发布时间】:2019-10-06 12:28:57
【问题描述】:

我有一个带有 open、high、low、close 和 key 列的 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

【问题讨论】:

    标签: python-3.x pandas pivot finance technical-indicator


    【解决方案1】:

    而不是 3 角钱 groupby 使用 GroupBy.agg 和字典,然后 sum 每行的值并除以 3。最后使用 Series.mapSeries.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
    

    【讨论】:

    • @BARUNSINGH - 你能解释更多吗?您需要将data.groupby('key') 更改为data.groupby(['key', 'key1']) 吗?
    • 是的。在这种情况下,我将如何使用 data['s'] = data['key1', 'key2'].map(s.shift()) 因为这会出错。
    • 是的,现在回答新问题。
    • 好的。谢谢.. :)
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2018-10-16
    • 2018-07-17
    • 2016-08-28
    • 2023-03-19
    相关资源
    最近更新 更多