python pd.crosstab在处理时间序列文本数据的用处
2016-08-26 17:31
686 查看
在优矿上的-量化分析师的python日记中看到一个函数很不错--pd.crosstab 。因为我们平时取到的多股数据可能如以下所示;
取两股为例: Sec1, Sec2
利用pandas的date_range获得一列时间序列,当然这边价格是简单假设的。
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登场的时间了
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,这里表示将对应的值求和,因为每个值都是唯一的,结果就是我们想要的了。
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大功告成!哈哈,算是学习日记吧。希望能养成这个好习惯,不然一直学了就忘,通过这个方式记录自己在学习过程中的体会也是不错的。
<
4000
br />
在这贴出一个链接,有兴趣可以看看。
量化分析师的Python日记【第15天:如何在优矿上搞一个wealthfront出来】
取两股为例: 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 dfSecName 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 dfSecName 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大功告成!哈哈,算是学习日记吧。希望能养成这个好习惯,不然一直学了就忘,通过这个方式记录自己在学习过程中的体会也是不错的。
<
4000
br />
在这贴出一个链接,有兴趣可以看看。
量化分析师的Python日记【第15天:如何在优矿上搞一个wealthfront出来】
相关文章推荐
- python pd.crosstab在处理时间序列文本数据的用处
- 人工智能:python 实现 第十一章,使用Pandas处理时间序列数据
- Python 收集Twitter时间序列数据
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- python 之pickle模块--输出保存到文本(基本的数据序列和反序列化)
- [resource-]Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - 数客
- 利用Python进行数据分析--时间序列
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)
- 用python处理时间、utf8文本、正则匹配、序列化、目录路径搜索、xml解析
- 利用Python进行数据分析——时间序列[十](1) .
- 时间序列数据处理的角逐:MongoDB vs. Cassandra
- Python的网页爬虫&文本处理&科学计&机器学习&数据挖掘工具集
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - 数客
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱