【问题标题】:DataFrame GroupBy into VolumeBarsDataFrame GroupBy 到 VolumeBars
【发布时间】:2020-07-02 19:55:01
【问题描述】:

我需要将市场数据整合到 VolumeBars(具有相同交易量的块)中。

作为输入数据,我有分钟柱(可能有下降),其中有以下列:时间、OHLC(开盘价、最高价、最低价、收盘价)和成交量。

目前,我正在尝试这种方式:

bar_volume_size = 100
df = hg
df['cumsum'] = (df["Volume"].cumsum() // bar_volume_size) + 1
df['over'] = (df["Volume"].cumsum() % bar_volume_size)
print(df.head(40))

此操作的结果如下所示:

                       Open    High     Low   Close  Volume  BarNo  over
2018-12-30 18:00:00  2.6780  2.6875  2.6755  2.6840      83      1    83
2018-12-30 18:01:00  2.6835  2.6875  2.6825  2.6875      40      2    23
2018-12-30 18:02:00  2.6875  2.6920  2.6875  2.6915      58      2    81
2018-12-30 18:03:00  2.6915  2.6945  2.6910  2.6920      36      3    17
2018-12-30 18:04:00  2.6910  2.6925  2.6910  2.6920      14      3    31
2018-12-30 18:05:00  2.6920  2.6920  2.6900  2.6900      16      3    47
2018-12-30 18:06:00  2.6905  2.6905  2.6880  2.6880      12      3    59
2018-12-30 18:07:00  2.6885  2.6890  2.6880  2.6880       5      3    64
2018-12-30 18:08:00  2.6885  2.6885  2.6880  2.6885       3      3    67
2018-12-30 18:09:00  2.6875  2.6875  2.6875  2.6875       1      3    68
2018-12-30 18:10:00  2.6875  2.6890  2.6875  2.6890       9      3    77
2018-12-30 18:11:00  2.6895  2.6895  2.6895  2.6895       4      3    81
2018-12-30 18:12:00  2.6900  2.6900  2.6890  2.6895      13      3    94
2018-12-30 18:13:00  2.6895  2.6895  2.6890  2.6890       3      3    97
2018-12-30 18:14:00  2.6890  2.6895  2.6890  2.6895      10      4     7
2018-12-30 18:15:00  2.6895  2.6895  2.6895  2.6895       0      4     7
2018-12-30 18:16:00  2.6895  2.6900  2.6895  2.6900       4      4    11
2018-12-30 18:17:00  2.6890  2.6895  2.6855  2.6870      31      4    42
2018-12-30 18:18:00  2.6875  2.6875  2.6875  2.6875       8      4    50
2018-12-30 18:19:00  2.6875  2.6885  2.6875  2.6885       5      4    55
2018-12-30 18:20:00  2.6890  2.6905  2.6890  2.6905       4      4    59
2018-12-30 18:21:00  2.6910  2.6910  2.6910  2.6910       2      4    61
2018-12-30 18:22:00  2.6910  2.6910  2.6910  2.6910       0      4    61
2018-12-30 18:23:00  2.6910  2.6910  2.6910  2.6910       0      4    61
2018-12-30 18:24:00  2.6910  2.6910  2.6910  2.6910       0      4    61
2018-12-30 18:25:00  2.6905  2.6905  2.6905  2.6905       1      4    62
2018-12-30 18:26:00  2.6890  2.6890  2.6890  2.6890       1      4    63
2018-12-30 18:27:00  2.6890  2.6890  2.6890  2.6890       1      4    64
2018-12-30 18:28:00  2.6890  2.6890  2.6890  2.6890       2      4    66
2018-12-30 18:29:00  2.6890  2.6890  2.6890  2.6890       0      4    66
2018-12-30 18:30:00  2.6895  2.6900  2.6890  2.6890       6      4    72
2018-12-30 18:31:00  2.6890  2.6890  2.6890  2.6890       1      4    73
2018-12-30 18:32:00  2.6890  2.6890  2.6890  2.6890       0      4    73
2018-12-30 18:33:00  2.6900  2.6900  2.6865  2.6890      14      4    87
2018-12-30 18:34:00  2.6870  2.6870  2.6865  2.6865      10      4    97
2018-12-30 18:35:00  2.6865  2.6865  2.6865  2.6865       0      4    97
2018-12-30 18:36:00  2.6860  2.6860  2.6850  2.6860      21      5    18
2018-12-30 18:37:00  2.6870  2.6875  2.6870  2.6875       4      5    22
2018-12-30 18:38:00  2.6865  2.6865  2.6865  2.6865       1      5    23
2018-12-30 18:39:00  2.6865  2.6865  2.6865  2.6865       1      5    24

在 BarNo 列中,我有 VolumeBar 编号。我认为这对于带有 BarNo 列的 GroupBy 数据框是可能的,例如 3:

                       Open    High     Low   Close  Volume  BarNo  over
2018-12-30 18:03:00  2.6915  2.6945  2.6910  2.6920      36      3    17
2018-12-30 18:04:00  2.6910  2.6925  2.6910  2.6920      14      3    31
2018-12-30 18:05:00  2.6920  2.6920  2.6900  2.6900      16      3    47
2018-12-30 18:06:00  2.6905  2.6905  2.6880  2.6880      12      3    59
2018-12-30 18:07:00  2.6885  2.6890  2.6880  2.6880       5      3    64
2018-12-30 18:08:00  2.6885  2.6885  2.6880  2.6885       3      3    67
2018-12-30 18:09:00  2.6875  2.6875  2.6875  2.6875       1      3    68
2018-12-30 18:10:00  2.6875  2.6890  2.6875  2.6890       9      3    77
2018-12-30 18:11:00  2.6895  2.6895  2.6895  2.6895       4      3    81
2018-12-30 18:12:00  2.6900  2.6900  2.6890  2.6895      13      3    94
2018-12-30 18:13:00  2.6895  2.6895  2.6890  2.6890       3      3    97

取该组“Open”列的第一个元素,该组“High”列的最大值,该组“Low”列的最小值和“Close”列的最后一个元素,正好取@987654324 @ as "Volume" 并将所有这些数据放入另一个 DataFrame 中(或者,可能在此 DataFrame 中)。

【问题讨论】:

    标签: python pandas dataframe aggregate


    【解决方案1】:

    你可以像这样使用 groupby 和聚合。

    group_rules = {'Open':'first', 'High':'max', 'Low':'min'}
    df.groupby(['BarNo']).agg(group_rules).reset_index()
    

    【讨论】:

    • 太棒了!几乎是我需要的!
    • 太棒了。您可以投票并将其标记为答案。 :)
    • 不知道怎么做,我没有足够的声望来支持你
    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2021-05-18
    相关资源
    最近更新 更多