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

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

取两股为例: Sec1, Sec2

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

[python]  view plain  copy
 print ?
  1. import numpy as np  
  2. import pandas as pd  
  3. a = np.arange(10)  
  4. b = np.arange(10,20)  
  5. date = pd.date_range('2016-8-26', periods = 10)  
  6. df1 = pd.DataFrame({'date': date, 'SecName':'sec1''price': a})  
  7. df2 = pd.DataFrame({'date': date, 'SecName':'sec2''price': b})  
  8. 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登场的时间了

[python]  view plain  copy
 print ?
  1. df = pd.crosstab(df['date'], df['SecName']) # 第一个参数是指定index,第二个参数是指定column  
  2. 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,这里表示将对应的值求和,因为每个值都是唯一的,结果就是我们想要的了。

[python]  view plain  copy
 print ?
  1. df = pd.crosstab(df['date'], df['SecName'],values=df['price'],aggfunc=sum)  
  2. 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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值