python pd.crosstab在处理时间序列文本数据的用处

在优矿上的-量化分析师的python日记中看到一个函数很不错--pd.crosstab 。因为我们平时取到的多股数据可能如以下所示;

取两股为例: Sec1, Sec2

利用pandas的date_range获得一列时间序列,当然这边价格是简单假设的。

import numpy as np
import pandas as pd
a = np.arange(10)
b = np.arange(10,20)
date = pd.date_range('2016-8-26', periods = 10)
df1 = pd.DataFrame({'date': date, 'SecName':'sec1', 'price': a})
df2 = pd.DataFrame({'date': date, 'SecName':'sec2', 'price': b})
df = pd.concat([df1,df2], axis = 0) #将两个数据框按行拼接
最终得到的df 数据框为 (第一列为自动获取的index)
  SecName       date  price
0    sec1 2016-08-26      0
1    sec1 2016-08-27      1
2    sec1 2016-08-28      2
3    sec1 2016-08-29      3
4    sec1 2016-08-30      4
5    sec1 2016-08-31      5
6    sec1 2016-09-01      6
7    sec1 2016-09-02      7
8    sec1 2016-09-03      8
9    sec1 2016-09-04      9
0    sec2 2016-08-26     10
1    sec2 2016-08-27     11
2    sec2 2016-08-28     12
3    sec2 2016-08-29     13
4    sec2 2016-08-30     14
5    sec2 2016-08-31     15
6    sec2 2016-09-01     16
7    sec2 2016-09-02     17
8    sec2 2016-09-03     18
9    sec2 2016-09-04     19

接下来就是pd.crosstab登场的时间了

df = pd.crosstab(df['date'], df['SecName']) # 第一个参数是指定index,第二个参数是指定column
print df 
SecName     sec1  sec2
date                  
2016-08-26     1     1
2016-08-27     1     1
2016-08-28     1     1
2016-08-29     1     1
2016-08-30     1     1
2016-08-31     1     1
2016-09-01     1     1
2016-09-02     1     1
2016-09-03     1     1
2016-09-04     1     1

哎嘛不对,这样就成为了excel数据透视表中的count了,所以得到的值都是1,因为每组(date,SecName)对应的值是唯一的

所以应该指定一下第三,四个参数 values,aggfun=sum,这里表示将对应的值求和,因为每个值都是唯一的,结果就是我们想要的了。

df = pd.crosstab(df['date'], df['SecName'],values=df['price'],aggfunc=sum)
print df
SecName     sec1  sec2
date                  
2016-08-26     0    10
2016-08-27     1    11
2016-08-28     2    12
2016-08-29     3    13
2016-08-30     4    14
2016-08-31     5    15
2016-09-01     6    16
2016-09-02     7    17
2016-09-03     8    18
2016-09-04     9    19

第一篇blog大功告成!哈哈,算是学习日记吧。希望能养成这个好习惯,不然一直学了就忘,通过这个方式记录自己在学习过程中的体会也是不错的。

在这贴出一个链接,有兴趣可以看看。

 量化分析师的Python日记【第15天:如何在优矿上搞一个wealthfront出来】











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值