pandas9_高级处理_交叉表和透视表
import numpy as np
import pandas as pd
交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)
pd.crosstab(value1, value2)
透视表:透视表是将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数
DataFrame.pivot_table([], index=[])
一、使用pd.crosstab()
案例分析
数据准备
data = pd.read_csv("./data/stock_day.csv")
data.index
Index(['2018-02-27', '2018-02-26', '2018-02-23', '2018-02-22', '2018-02-14','2018-02-13', '2018-02-12', '2018-02-09', '2018-02-08', '2018-02-07',...'2015-03-13', '2015-03-12', '2015-03-11', '2015-03-10', '2015-03-09','2015-03-06', '2015-03-05', '2015-03-04', '2015-03-03', '2015-03-02'],dtype='object', length=643)
# 1.先找到每个日期对应星期几
time = pd.to_datetime(data.index)
time
DatetimeIndex(['2018-02-27', '2018-02-26', '2018-02-23', '2018-02-22','2018-02-14', '2018-02-13', '2018-02-12', '2018-02-09','2018-02-08', '2018-02-07',...'2015-03-13', '2015-03-12', '2015-03-11', '2015-03-10','2015-03-09', '2015-03-06', '2015-03-05', '2015-03-04','2015-03-03', '2015-03-02'],dtype='datetime64[ns]', length=643, freq=None)
time.day
Int64Index([27, 26, 23, 22, 14, 13, 12, 9, 8, 7,...13, 12, 11, 10, 9, 6, 5, 4, 3, 2],dtype='int64', length=643)
time.weekday
Int64Index([1, 0, 4, 3, 2, 1, 0, 4, 3, 2,...4, 3, 2, 1, 0, 4, 3, 2, 1, 0],dtype='int64', length=643)
data['week'] = time.weekday
data
open | high | close | low | volume | price_change | p_change | ma5 | ma10 | ma20 | v_ma5 | v_ma10 | v_ma20 | turnover | week | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2018-02-27 | 23.53 | 25.88 | 24.16 | 23.53 | 95578.03 | 0.63 | 2.68 | 22.942 | 22.142 | 22.875 | 53782.64 | 46738.65 | 55576.11 | 2.39 | 1 |
2018-02-26 | 22.80 | 23.78 | 23.53 | 22.80 | 60985.11 | 0.69 | 3.02 | 22.406 | 21.955 | 22.942 | 40827.52 | 42736.34 | 56007.50 | 1.53 | 0 |
2018-02-23 | 22.88 | 23.37 | 22.82 | 22.71 | 52914.01 | 0.54 | 2.42 | 21.938 | 21.929 | 23.022 | 35119.58 | 41871.97 | 56372.85 | 1.32 | 4 |
2018-02-22 | 22.25 | 22.76 | 22.28 | 22.02 | 36105.01 | 0.36 | 1.64 | 21.446 | 21.909 | 23.137 | 35397.58 | 39904.78 | 60149.60 | 0.90 | 3 |
2018-02-14 | 21.49 | 21.99 | 21.92 | 21.48 | 23331.04 | 0.44 | 2.05 | 21.366 | 21.923 | 23.253 | 33590.21 | 42935.74 | 61716.11 | 0.58 | 2 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2015-03-06 | 13.17 | 14.48 | 14.28 | 13.13 | 179831.72 | 1.12 | 8.51 | 13.112 | 13.112 | 13.112 | 115090.18 | 115090.18 | 115090.18 | 6.16 | 4 |
2015-03-05 | 12.88 | 13.45 | 13.16 | 12.87 | 93180.39 | 0.26 | 2.02 | 12.820 | 12.820 | 12.820 | 98904.79 | 98904.79 | 98904.79 | 3.19 | 3 |
2015-03-04 | 12.80 | 12.92 | 12.90 | 12.61 | 67075.44 | 0.20 | 1.57 | 12.707 | 12.707 | 12.707 | 100812.93 | 100812.93 | 100812.93 | 2.30 | 2 |
2015-03-03 | 12.52 | 13.06 | 12.70 | 12.52 | 139071.61 | 0.18 | 1.44 | 12.610 | 12.610 | 12.610 | 117681.67 | 117681.67 | 117681.67 | 4.76 | 1 |
2015-03-02 | 12.25 | 12.67 | 12.52 | 12.20 | 96291.73 | 0.32 | 2.62 | 12.520 | 12.520 | 12.520 | 96291.73 | 96291.73 | 96291.73 | 3.30 | 0 |
643 rows × 15 columns
# 2.把 p_change按照大小去分个类 0为界限
data['p_n']=np.where(data['price_change']>0,1,0)
data
open | high | close | low | volume | price_change | p_change | ma5 | ma10 | ma20 | v_ma5 | v_ma10 | v_ma20 | turnover | week | p_n | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2018-02-27 | 23.53 | 25.88 | 24.16 | 23.53 | 95578.03 | 0.63 | 2.68 | 22.942 | 22.142 | 22.875 | 53782.64 | 46738.65 | 55576.11 | 2.39 | 1 | 1 |
2018-02-26 | 22.80 | 23.78 | 23.53 | 22.80 | 60985.11 | 0.69 | 3.02 | 22.406 | 21.955 | 22.942 | 40827.52 | 42736.34 | 56007.50 | 1.53 | 0 | 1 |
2018-02-23 | 22.88 | 23.37 | 22.82 | 22.71 | 52914.01 | 0.54 | 2.42 | 21.938 | 21.929 | 23.022 | 35119.58 | 41871.97 | 56372.85 | 1.32 | 4 | 1 |
2018-02-22 | 22.25 | 22.76 | 22.28 | 22.02 | 36105.01 | 0.36 | 1.64 | 21.446 | 21.909 | 23.137 | 35397.58 | 39904.78 | 60149.60 | 0.90 | 3 | 1 |
2018-02-14 | 21.49 | 21.99 | 21.92 | 21.48 | 23331.04 | 0.44 | 2.05 | 21.366 | 21.923 | 23.253 | 33590.21 | 42935.74 | 61716.11 | 0.58 | 2 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2015-03-06 | 13.17 | 14.48 | 14.28 | 13.13 | 179831.72 | 1.12 | 8.51 | 13.112 | 13.112 | 13.112 | 115090.18 | 115090.18 | 115090.18 | 6.16 | 4 | 1 |
2015-03-05 | 12.88 | 13.45 | 13.16 | 12.87 | 93180.39 | 0.26 | 2.02 | 12.820 | 12.820 | 12.820 | 98904.79 | 98904.79 | 98904.79 | 3.19 | 3 | 1 |
2015-03-04 | 12.80 | 12.92 | 12.90 | 12.61 | 67075.44 | 0.20 | 1.57 | 12.707 | 12.707 | 12.707 | 100812.93 | 100812.93 | 100812.93 | 2.30 | 2 | 1 |
2015-03-03 | 12.52 | 13.06 | 12.70 | 12.52 | 139071.61 | 0.18 | 1.44 | 12.610 | 12.610 | 12.610 | 117681.67 | 117681.67 | 117681.67 | 4.76 | 1 | 1 |
2015-03-02 | 12.25 | 12.67 | 12.52 | 12.20 | 96291.73 | 0.32 | 2.62 | 12.520 | 12.520 | 12.520 | 96291.73 | 96291.73 | 96291.73 | 3.30 | 0 | 1 |
643 rows × 16 columns
# 3.通过交叉表找寻两列数据的关系`
count = pd.crosstab(data['week'], data['p_n'])
count
p_n | 0 | 1 |
---|---|---|
week | ||
0 | 63 | 62 |
1 | 55 | 76 |
2 | 61 | 71 |
3 | 63 | 65 |
4 | 59 | 68 |
# 算数运算,先求和,按照行
sum = count.sum(axis=1).astype(np.float32)
# 进行相除操作,得出比例
pro = count.div(sum, axis=0)
pro
p_n | 0 | 1 |
---|---|---|
week | ||
0 | 0.504000 | 0.496000 |
1 | 0.419847 | 0.580153 |
2 | 0.462121 | 0.537879 |
3 | 0.492188 | 0.507812 |
4 | 0.464567 | 0.535433 |
# 4.查看效果,画图
pro.plot(kind='bar',stacked=True)
# stacked=True 表示叠放
- 二、使用 pivot_table(透视表)实现
- 使用透视表,使得上述过程更加简单
data.pivot_table(['p_n'],index='week')
p_n | |
---|---|
week | |
0 | 0.496000 |
1 | 0.580153 |
2 | 0.537879 |
3 | 0.507812 |
4 | 0.535433 |
pro.plot(kind='bar', stacked=True)
pandas9_高级处理_交叉表和透视表相关推荐
- pandas高级处理-交叉表与透视表
pandas高级处理-交叉表与透视表 1 交叉表与透视表什么作用 [就是探究两列数据之间的关系] 探究股票的涨跌与星期几有关? 以下图当中表示,week代表星期几,1,0代表这一天股票的涨跌幅是好还 ...
- 机器学习之Pandas:Pandas介绍、基本数据操作、DataFrame运算、Pandas画图、文件读取与处、缺失值处理、数据离散化、合并、交叉表和透视表、分组与聚合、案例(超长篇,建议收藏慢慢看)
文章目录 Pandas 学习目标 1Pandas介绍 学习目标 1 Pandas介绍 2 为什么使用Pandas 3 案例: 问题:如何让数据更有意义的显示?处理刚才的股票数据 给股票涨跌幅数据增加行 ...
- pandas——交叉表与透视表
1.使用povit_table函数创建透视表 利用pivot_table函数可以实现透视表,pivot_table()函数的常用参数及其使用格式如下. pands.pivot_table(data, ...
- 以股票weekday和涨幅关系为例创建dataframe交叉表与透视表
文章目录 前言 代码过程 总结 前言 可以使用交叉表和透视表,来直观的看出两个变量的数值关系.本文以某一段时间的股票数据为例,创建星期几weekday和股票涨幅交叉表与透视表来直观看两个特征之间的关系 ...
- pandas - 交叉表与透视表
学习目标 应用crosstab和pivot_table实现交叉表与透视表 应用:股票的每日涨跌跟星期几关系大 1 交叉表与透视表什么作用 探究股票的涨跌与星期几有关? 以下图当中表示,week代表星期 ...
- pandas交叉表与透视表pd.crosstab()和pd.pivot_table()函数详解
一.交叉表 交叉表:用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表),pd.crosstab(value1, value2) pandas.crosstab(index, c ...
- 单单表单独占一行_聊一聊 Excel 数据透视表的 4 种布局选项
作者:懒人Excel 链接:https://www.jianshu.com/p/be980f54a1dd 在 ,我们学习了数据透视表的基础知识,学会了如何插入数据透视表.透视表的4个字段和基本的设计方 ...
- 按英语体育计算机创建透视表,数据透视表和数据透视图概述
可使用数据透视表汇总.分析.浏览和呈现汇总数据. 数据透视图通过对数据透视表中的汇总数据添加可视化效果来对其进行补充,以便用户轻松查看比较.模式和趋势. 借助数据透视表和数据透视图,用户可对企业中的关 ...
- java刷新透视表数据源,Java 创建、刷新Excel透视表/设置透视表行折叠、展开
Java 创建.刷新Excel透视表/设置透视表行折叠.展开 透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表.本文以创建透视表.刷新透视表以及设置透视表的 ...
最新文章
- Hive 基本语法操练(四):Hive 复合类型
- 关于bootstrap的一些想法
- c执行cmd pdf2swf_PDF2SWF简单使用
- C++入门之常量与变量
- Airbnb数据科学团队进化论:如何由内而外实现数据驱动
- java房源信息管理的代码_crawler4j源码学习(2):Ziroom租房网房源信息采集爬虫
- javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第3部分
- Python可以减少代码量?我不信
- iOS推送群发的问题,PushSharp作者的这篇讲得最详细了
- python threading_Python threading的使用方法解析
- 哈工大讯飞联合实验室发布法律领域ELECTRA预训练模型
- Linux文件夹文件创建、删除
- Unity3D脚本编程——使用C#语言开发跨平台游戏
- AfterEffect滤镜插件总目录
- 【地震数据处理】GAN网络基础知识
- 实例!AGV与MES对接的智能仓储系统设计
- 学会Apache网页与安全的优化,让你的技术更加胜人一筹!(网页压缩与缓存、隐藏版本信息与配置防盗链)
- linux快速扫ip段端口,小巧快速的IP地址和端口扫描工具Angry IP Scanner
- PHP审计-RIPS
- 特征选择——变量重要性排序
热门文章
- openlayer拖动图标消失以及绘线穿越地图问题
- 玩转CPU Topology
- 安装软件报“错误写入注册表键”问题解决
- 【Python】【Tkinter】png转ico小工具源码以及打包exe
- flex布局的justify-content属性写法注意事项
- Java %d,%2d, %02d 各自代表什么意思
- 下载优酷腾讯等视频快捷网站
- 企业工程管理系统源码-java-数字化可视化项目管理平台
- “看到新同事的工资后,我退出了群聊”
- [博创智联]创新创客智能硬件平台——认识实验箱