我将以下数据保存为pandas 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
答案 0 :(得分:0)
with open('/tmp/ba.data') as dataF:
oldk, oldsub = None, None
for key, subi in groupby(map(str.split,dataF), lambda x: (x[1],x[2])):
if oldk == None:
oldk, oldsub = key, list(subi)
else:
newsub = list(subi)
print ' '.join(oldk), '->', ' '.join(key), float(oldsub[-1][3])-float(newsub[0][3])
oldk, oldsub = None, None
得到这个
07:00:00 B -> 07:00:00 A 0.0
07:00:00 B -> 07:00:00 A -2.0
07:00:01 B -> 07:00:01 A -2.0
07:00:02 A -> 07:00:03 B 2.0
07:00:03 A -> 07:00:03 B 1.0
07:00:04 A -> 07:00:04 B 1.0
如果你改变了
if oldk == None:
到
if oldk == None or oldk[0] != key[0]:
你会得到
07:00:00 B -> 07:00:00 A 0.0
07:00:00 B -> 07:00:00 A -2.0
07:00:01 B -> 07:00:01 A -2.0
07:00:03 B -> 07:00:03 A -1.0
07:00:04 A -> 07:00:04 B 1.0