如何使用pandas聚合重复的时间戳?

时间:2012-06-11 14:38:45

标签: python indexing time-series pandas

我正在研究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

它继续......

我正在使用pandas来加载数据。在此之后,我希望能够做到以下几点,采取重复的时间的体积加权平均值。

即。因为在时间08:01:16有两个问题,我想根据音量计算平均价格(58.4 * 60 + 58 * 60)/(60 + 60)以及音量的平均值。体积列为(60 + 60)/ 2。

1 个答案:

答案 0 :(得分:9)

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