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

你可能感兴趣的:(python pd.crosstab在处理时间序列文本数据的用处)