4

我正在研究python(pandas特别是)来分析数据集。(Python 太牛了,开源的威力惊人)。我的数据集的特定部分有问题。

我有以下数据集,

time,contract,ticker,expiry,strike,quote,price,volume
08:01:08,C,PXA,20100101,4000,A,57.8,60
08:01:11,C,PXA,20100101,4000,A,58.4,60
08:01:12,C,PXA,20100101,4000,A,58,60
08:01:16,C,PXA,20100101,4000,A,58.4,60
08:01:16,C,PXA,20100101,4000,A,58,60
08:01:21,C,PXA,20100101,4000,A,58.4,60
08:01:21,C,PXA,20100101,4000,A,58,60

它继续......

我正在使用熊猫来加载数据。在此之后,我希望能够执行以下操作,对出现重复的时间进行体积加权平均。

即因为在 08:01:16 有两个询价,我想根据成交量计算平均价格,即 (58.4*60 + 58*60)/(60+60) 和成交量的平均值体积列将是 (60+60)/2。

4

1 回答 1

12
In [28]: a = pd.read_csv('aa.csv')

In [29]: a
Out[29]: 
       time contract ticker    expiry  strike quote  price  volume
0  08:01:08        C    PXA  20100101    4000     A   57.8      60
1  08:01:11        C    PXA  20100101    4000     A   58.4      60
2  08:01:12        C    PXA  20100101    4000     A   58.0      60
3  08:01:16        C    PXA  20100101    4000     A   58.4      60
4  08:01:16        C    PXA  20100101    4000     A   58.0      60
5  08:01:21        C    PXA  20100101    4000     A   58.4      60
6  08:01:21        C    PXA  20100101    4000     A   58.0      60

In [30]: pd.DataFrame([{'time': k,
                        'price': (v.price * v.volume).sum() / v.volume.sum(),
                        'volume': v.volume.mean()}
                       for k,v in a.groupby(['time'])],
                      columns=['time', 'price', 'volume'])
Out[30]: 
       time  price  volume
0  08:01:08   57.8      60
1  08:01:11   58.4      60
2  08:01:12   58.0      60
3  08:01:16   58.2      60
4  08:01:21   58.2      60
于 2012-06-11T14:57:10.480 回答