我想将带有刻度数据的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,我不想因为时间的考虑而使用任何超级复杂的方法
答案 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