# 一文掌握Pandas量化进阶

# 这节课学习Pandas更深的内容。

# 导入库:
import numpy as np
import pandas as pd # 制作DataFrame
np.random.seed(10)
period = pd.date_range('2017-1-1', periods=10000, freq='D')
df = pd.DataFrame(np.random.randn(10000, 4),
columns=['Data1', 'Data2', 'Data3', 'Data4'],
index = period)
print(df.head())
# Data1 Data2 Data3 Data4
# 2017-01-01 1.331587 0.715279 -1.545400 -0.008384
# 2017-01-02 0.621336 -0.720086 0.265512 0.108549
# 2017-01-03 0.004291 -0.174600 0.433026 1.203037
# 2017-01-04 -0.965066 1.028274 0.228630 0.445138
# 2017-01-05 -1.136602 0.135137 1.484537 -1.079805 # 1> Group操作 # ① 一重分组
df['G1'] = np.random.choice(['A','B','C','D'],10000) # 新加一列用作分组。
grouped = df.groupby('G1')
print(grouped.size()) # 查看分组情况。
# G1
# A 2484
# B 2491
# C 2502
# D 2523
# dtype: int64 grouped.sum() # 分组求和
grouped.max() # 寻找分组最大的
grouped.mean() # 分组求平均
grouped.describe() # 分组统计量
np.transpose(grouped.describe()) # 转置 print(grouped.get_group('A').head()) # 挑出分组为A的DataFrame。 # ②双重分组
# 再建立一个分组
df['G2'] = np.random.choice(['S','Y'],10000)
grouped = df.groupby(['G1','G2']) # 哪个分组在前面就先按哪个分组分类。 # 聚合运算。按G1、G2分组后,分别求Data1和Data2的平均值和最大值。
print(grouped.agg({'Data1':np.mean, 'Data2':np.max})) # 2> 合并操作 # 建立DataFrame
df1 = pd.DataFrame(['1','2','3','4'],
index=['a','b','c','g'],
columns=['A']) df2 = pd.DataFrame(['5','6','7','8'],
index=['a','b','e','f'],
columns=['B']) # ① 用concat合并DataFrame
df = pd.concat((df1,df2),axis=1,ignore_index=False) # 横向合并
print(df)
# A B
# a 1 5
# b 2 6
# c 3 NaN
# g 4 NaN
# e NaN 7
# f NaN 8
# 自动按索引合并,为空不会报错。 # ② DataFrame内置合并方法 df = pd.DataFrame({'A': df1['A'], 'B': df2['B']}) # ③ Join操作(有条件的合并) df1.join(df2,how='left') # 按df1的索引合并,left是默认值,还可以写right,inner,outer。 # ④ Merge操作
df1 = pd.DataFrame(['1','2','3','4'],
index=['a','b','c','d'],
columns=['A',]) df2 = pd.DataFrame(['5','6','7','8'],
index=['a','b','c','d'],
columns=['B',]) c = pd.Series(['10','11','12','13'],
index=['a','b','c','d']) # df1和df2都新增一列。
df1['C'] = c
df2['C'] = c # 合并
print(pd.merge(df1,df2,on='C')) # 该函数默认将一样的列合并。on的默认值在这里就是C.
# A C B
# 0 1 10 5
# 1 2 11 6
# 2 3 12 7
# 3 4 13 8
# 索引会重置。
# 注意,慎用这里的on参数.当C内的数据有重复时,用on参数达不到预想的合并效果。
# 转而用下面的方法合并。(根据索引合并)
print(pd.merge(df1,
df2,
left_index=True,
right_index=True,
suffixes=['_df1','_df2']))
# A C_df1 B C_df2
# a 1 10 5 10
# b 2 11 6 11
# c 3 12 7 12
# d 4 13 8 13
# 其中还有how参数,inner和outer。当df1和df2不同长度时,读者可以自己尝试下效果。 # 3> 层次化索引 np.random.seed(10)
df = pd.Series(np.random.randn(5),
index=[['a', 'a', 'b','b', 'b'],
[1,2,1,2,3]])
print(df)
# a 1 1.331587
# 2 0.715279
# b 1 -1.545400
# 2 -0.008384
# 3 0.621336
# a,b为level 0,123为level 1。
# dtype: float64 # 用unstack()重新排列
df.unstack()
df.unstack().T # 转置
df.unstack().stack() # 逆运算 print(df.sum(level=0)) # 按level0聚合
# a 2.046865
# b -0.932448
# dtype: float64
print(df.sum(level=1)) # 按level1聚合
# 1 -0.213814
# 2 0.706895
# 3 0.621336
# dtype: float64

【PY从0到1】 一文掌握Pandas量化进阶的更多相关文章

  1. 【PY从0到1】 一文掌握Pandas量化基础

    # 2[PY从0到1] 一文掌握Pandas量化基础 # Numpy和pandas是什么关系呢? # 在我看来,np偏向于数据细节处理,pd更偏向于表格整体的处理. # 要记住的pd内部的数据结构采用 ...

  2. IIS6(Win2003) 使用.net 4.0 后,默认文档失效解决方案。

    IIS6(Win2003) 使用.net framework 4.0 后,默认文档失效解决方案. 用.net framework 4.0 开发的WEB项目,但放到iis6 中无法使用默认文档,状况如下 ...

  3. 智表ZCELL产品V1.4.0开发API接口文档 与 产品功能清单

    为了方便大家使用ZCELL,应网友要求,整理编写了相关文档,现与产品一起同步发布,供大家下载使用,使用过程中如有疑问,请与我QQ联系. 智表(ZCELL)V1.4.0版本  功能清单文档下载地址: 功 ...

  4. python manage.py runserver 0.0.0.0:8000

    python manage.py runserver 这种命令行,可以在服务器端输入IP:8000直接访问 在 python manage.py runserver 127.0.01:8000 在服务 ...

  5. 前置机器学习(四):一文掌握Pandas用法

    Pandas提供快速,灵活和富于表现力的数据结构,是强大的数据分析Python库. 本文收录于机器学习前置教程系列. 一.Series和DataFrame Pandas建立在NumPy之上,更多Num ...

  6. MDN 文档高级操作进阶教程

    MDN 文档高级操作进阶教程 MDN 文档, 如何优雅的使用 MDN 文档上的富文本编辑器 pre & 语法高亮器 code & note box source code 上传附件 i ...

  7. Django 2.0.1 官方文档翻译: 文档目录 (Page 1)

    Django documentation contents 翻译完成后会做标记. 文档按照官方提供的内容一页一页的进行翻译,有些内容涉及到其他节的内容,会慢慢补上.所有的翻译内容按自己的理解来写,尽量 ...

  8. airflow2.0.2分布式安装文档

    需要安装的组件 组件 功能 Airflow Webserver 查询元数据以监控和执行DAGs的web界面. Airflow Scheduler 它检查元数据数据库中的DAG和任务的状态,在必要时创建 ...

  9. _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0

    笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

随机推荐

  1. 精通MySQL之索引篇,这篇注重练习!

    老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...

  2. 思维导图整理Java并发基础

    话不多说,先上图. 1.基本概念 欲说线程,必先说进程. 进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位. 线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进 ...

  3. mysql高级day3

    Mysql高级-day03 1. 应用优化 前面章节,我们介绍了很多数据库的优化措施.但是在实际生产环境中,由于数据库本身的性能局限,就必须要对前台的应用进行一些优化,来降低数据库的访问压力. 1.1 ...

  4. Java链表(英雄增删查改)

    链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结: 1.链表是以节点的方式来存储,是链式存储. 2.每个节点包含 data 域, next 域:指向下一个节点. 3 ...

  5. 微信小程序分享之生成海报--canvas

    首先看文档 了解知识点~~(https://developers.weixin.qq.com/miniprogram/dev/component/) githup:https://github.com ...

  6. 【noi 2.6_8787】数的划分(DP){附【转】整数划分的解题方法}

    题意:问把整数N分成K份的分法数.(与"放苹果"不同,在这题不可以有一份为空,但可以类比)解法:f[i][j]表示把i分成j份的方案数.f[i][j]=f[i-1][j-1](新开 ...

  7. hdu3635 Dragon Balls

    Problem Description Five hundred years later, the number of dragon balls will increase unexpectedly, ...

  8. Educational Codeforces Round 91 (Rated for Div. 2) C. Create The Teams (模拟)

    题意:有\(n\)个队员,每个队友都有一个能力值,构造队伍,要求队伍人数*队伍中最低能力值不小于\(x\),求能构造的最大队伍数. 题解:大水题,排个序,倒着模拟就行了. 代码: int t; int ...

  9. rabbitMq学习一

    1.安装rabbitmq Windows下安装 首先,我们访问官网[https://www.rabbitmq.com/],点击Get Started. 选择下载安装,由于RabbitMQ使用Erlan ...

  10. CF1462-F. The Treasure of The Segments

    题意: 给出n个线段组成的集合,第i个线段用 \(\{l_i, r_i\}\) 表示线段从坐标轴的点\(l_i\)横跨到点\(r_i\).现在你可以删除其中的一些线段,使得剩下的线段组成的集合中至少存 ...