0

以下のデータをパンダとして保存しています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
4

1 に答える 1

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
于 2012-06-20T20:57:25.330 に答える