【发布时间】:2012-06-16 11:24:35
【问题描述】:
我将以下数据保存为熊猫dataframe。有了这些数据,我想计算特定秒的买卖价差。但是,正如您所见,要价比出价多很多倍,反之亦然。所以我的目标是执行以下操作:我只想获取这样的数据,即它是一个出价,然后是一个要价,或者是一个要价,然后是相同时间戳的出价,然后计算点差以及有多少点差。
在下面的数据中,它看起来像下面,我会取第 1 行和第 2 行,并计算差值为 0。然后我会取第 3 行和第 4 行,差值为 2。
time quote price volume
0 07:00:00 B 3950.5 5
1 07:00:00 B 3950.0 4
2 07:00:00 A 3950.0 7
3 07:00:00 B 3948.0 17
4 07:00:00 A 3950.0 20
5 07:00:00 A 3950.0 31
6 07:00:00 A 3950.0 44
7 07:00:00 A 3950.0 57
8 07:00:00 A 3950.0 67
9 07:00:00 A 3950.0 57
10 07:00:00 A 3950.0 67
11 07:00:00 A 3950.0 80
12 07:00:00 A 3950.0 90
13 07:00:00 A 3950.0 99
14 07:00:01 B 3948.0 15
15 07:00:01 A 3950.0 89
16 07:00:01 A 3949.5 1
17 07:00:02 A 3950.0 89
18 07:00:03 B 3948.0 12
19 07:00:03 A 3949.0 1
20 07:00:03 B 3948.0 9
21 07:00:03 B 3948.5 4
22 07:00:04 A 3949.5 5
23 07:00:04 B 3948.5 2
24 07:00:05 B 3948.5 1
这是我想要的输出:
time spread num_spread
07:00:00 2 2
07:00:01 2 1
07:00:03 1 1
07:00:04 1 1
【问题讨论】:
-
您首先需要按时间戳拆分数据,然后如果要将其视为数组,则从那里移出数组中的一个元素以用作比较,如果报价类型相等,然后继续并移动一个新元素重复直到!= 然后计算传播。我不知道你的
num_spread来自哪里。 -
这正是我的想法。我首先进行了 groupby,但是要比较的数组移位将非常缓慢。我正在尝试对此进行矢量化。到目前为止,我已经想出将 1 分配给 B 并将 -1 分配给 A。取数组本身和 1 滞后之间的差异将起作用,除非它是 BABABA 的情况,它将产生 0 0 0 0 0。我可以通过循环解决此问题,但重点是对其进行矢量化以最小化计算时间。 num_spread 来自该时间段内计算的点差数量
-
我不相信你可以用你正在尝试做的事情来避免 100% 的迭代。您可以复制
quote列两次,每个方向将其移动一个并将其应用于您的数据集,以根据其中quote为!= 到quote_next和quote_prev的条目创建数据透视表。 -
它似乎可以使用智能数论参数,但它似乎比迭代慢,因为它涉及幂和向量乘法
标签: python time-series pandas