将tick数据转换为每日

时间:2014-03-02 20:27:04

标签: python pandas finance

我想将带有刻度数据的csv文件转换为每日价格和交易量。我拥有的csv文件格式为:unix,price,volume。

groupby函数只让我按unix秒分组。获得每日收盘价和每日交易量的好方法是什么?

我正在使用python 2.7并且还安装了pandas,但我还不太熟悉它。

真的,我能得到最大的工作就是:

import pandas as pd

data = pd.read_csv('file.csv',names=['unix','price','vol'])

datagr = data.groupby('unix')
dataPrice = datagr['price'].last()
dataVol = datagr['vol'].sum()

示例数据:

1391067323,772.000000000000,0.020200000000
1391067323,772.000000000000,0.020000000000
1391067323,771.379000000000,1.389480000000
1391067323,772.000000000000,1.244540000000
1391067326,774.955000000000,0.084830600000
1391067326,774.955000000000,0.084833400000
1391067327,774.955000000000,0.084830600000
1391067331,774.953000000000,0.200000000000
1391067336,774.951000000000,0.101202000000

这将检索每个unix秒的最后价格,并将在unix秒内发生的交易量相加。问题是它分组到第二个unix,我不想因为时间的考虑而使用任何超级复杂的方法

1 个答案:

答案 0 :(得分:3)

您可以使用to_datetime将unix时间转换为pandas的日期时间:

df['unix'] = pd.to_datetime(df['unix'], unit='s')

现在,您现在可以将其设置为索引resample

df = df.set_index('unix')

df.resample('D', how={'volume': 'sum', 'price': 'last'})

注意:我们对各列使用不同的方法。

示例:

In [11]: df = pd.DataFrame(np.random.randn(5, 2), pd.date_range('2014-01-01', periods=5, freq='H'), columns=list('AB'))

In [12]: df
Out[12]:
                            A         B
2014-01-01 00:00:00 -1.185459 -0.854037
2014-01-01 01:00:00 -1.232376 -0.817346
2014-01-01 02:00:00  0.478683 -0.467169
2014-01-01 03:00:00 -0.407009  0.290612
2014-01-01 04:00:00  0.181207 -0.171356

In [13]: df.resample('D', how={'A': 'sum', 'B': 'last'})
Out[13]:
                   A         B
2014-01-01 -2.164955 -0.171356