pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)
序列内置一些函数,用于循环对序列的元素执行操作。
一,应用和转换函数
应用apply
对序列的各个元素应用函数:
Series.apply(self, func, convert_dtype=True, args=(), **kwds)
参数注释:
- func:应用的函数,可以是自定义的函数,或NumPy函数
- convert_dtype:默认值是True,尝试把func应用的结果转换为更好的数据类型,如果设置为False,把结果转换为dtype=object.
- args:元组,在序列值之后,传递给func的位置参数(positional arguments)
- **kwds:传递给func的关键字(keyword)参数,可以有0、1、多个
位置参数和关键字参数的区别是:
- 位置参数是通过匹配位置来传参,关键字参数是通过匹配参数名称来传参。
- 关键字参数可以有多个,参数的名称不固定,只能在apply函数()的最后面,例如,关键字参数k1,k2,k3,那么kwargs=[k1,k2,k3]
- 位置参数args只能有一个
1,传递自定义的函数(使用位置参数)
创建自定义的函数,把函数应用于序列之上
>>> s = pd.Series([20, 21, 12], index=['London', 'New York', 'Helsinki'])
>>> def subtract_custom_value(x, custom_value):
... return x - custom_value
>>> s.apply(subtract_custom_value, args=(5,))
London 15
New York 16
Helsinki 7
dtype: int64
2,传递自定义的函数(使用关键字参数)
可以看到,关键字参数只能在apply函数的后面,
>>> def add_custom_values(x, **kwargs):
... for month in kwargs:
... x += kwargs[month]
... return x
>>> s.apply(add_custom_values, june=30, july=20, august=25)
London 95
New York 96
Helsinki 87
dtype: int64
转换transform
转换是对序列的一个轴进行转换,对于序列来说,axis=0,对行序列进行转换:
Series.transform(self, func, axis=0, *args, **kwargs)
二,分组
对序列分组,返回分组之后的对象,并可以调用聚合函数获得每个分组的聚合值:
Series.groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
参数注释:
by:用于对序列进行分组,参数by的值可以是函数,列名或列名列表,映射
1,by是函数
如果by是函数,那么调用的是序列索引的值
>>> s=pd.Series([1,2,3,4])
>>> s.groupby(by=lambda x: x<3).count()
False 1
True 3
dtype: int64
可以通过索引值来访问序列的元素值:
>>> s.groupby(by=lambda x: s.iat[x]<3).count()
False 2
True 2
dtype: int64
2,by是标签列表
如果by是标签列表,通常是按照列值来对数据进行分组,通常用于数据框(DataFrame)中
3,映射(字典)
当使用字典作为映射时,字典的key对应序列的值,按照字典的value对原始序列进行分组
>>> s.groupby(by={1:'a',2:'a',3:'b',4:'b'}).count()
a 2
b 1
dtype: int64
4,映射(序列)
当使用序列作为映射时,by序列的值用于对原始序列进行分组,by序列中相同的值对应着原始序列的值属于同一个分组;原始序列和by序列进行匹配的方法是索引对齐。
>>> s.groupby(by=pd.Series(data=[1,2,1,1],index=[0,2,3,1])).mean()
1 2.333333
2 3.000000
dtype: float64
索引对齐是怎么回事?
对于by参数的序列,数据是1, 2, 1, 1,这意味着,把原始序列分为2组,分组的key分别是1和2。
by序列的索引是0, 2, 3, 1,也就是说,当原始序列的索引为0, 3, 1 时,对应的分组key是1,当原始序列的索引为2时,对应的分组key是2。
索引对齐之后,原始序列中的值1,2,4属于分组1;原始序列中的值3属于分组2,再计算每个分组的均值。
三,滚动
滚动窗口计算,每个窗口计算一个聚合值,每次向前滚动一步(一步是一个元素):
Series.rolling(self, window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
参数注释:
- window:滚动的窗口值,或偏移量,每一个窗口都是一个固定值。
- min_periods:每个窗口的最小值,如果窗口中的元素数量小于min_periods,返回NaN;默认情况下,min_periods等于window参数的值。
举个例子,对于序列,当窗口设置为2时,如果不设置min_periods,那么窗口要想有值,那么窗口的大小必须是2,序列的第一个元素在窗口中只有一个值,因此返回NaN。
>>> s=pd.Series([1,2,3,4])
>>> s.rolling(2).sum()
0 NaN
1 3.0
2 5.0
3 7.0
dtype: float64
>>> s.rolling(window=2,min_periods =1).sum()
0 1.0
1 3.0
2 5.0
3 7.0
dtype: float64
四,扩展
扩展是指由序列的第一个元素开始,逐个元素向后计算聚合值,当聚合函数是sum时,表示从第一个元素开始,计算累加:
Series.expanding(self, min_periods=1, center=False, axis=0)
举个例子,从第一个元素开始计算序列1,2,3,4的累加:
>>> s=pd.Series([1,2,3,4])
>>> s.expanding().sum()
0 1.0
1 3.0
2 6.0
3 10.0
dtype: float64
五,指数加权移动平均
ewm(Exponentially Weighted Moving)是指数加权移动的简称,通常情况下,是对序列的元素进行指数加权,计算加权后的均值:
Series.ewm(self, com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=0)
1,参数注释
在进行指数加权时,平滑因子有四种指定方式得出:

adjust:处于初期的衰减调整因子,以解决相对权重不平衡的问题。
- 当设置adjust为True时,加权均值的计算公式是: (1-alpha)**(n-1), (1-alpha)**(n-2), …, 1-alpha, 1
- 当设置adjust为False时,加权均值的计算公式是:weighted_average[0] = arg[0]; weighted_average[i] = (1-alpha)*weighted_average[i-1] + alpha*arg[i].
2,指数加权移动平均的意义
指数加权移动均值(EWMA,Exponentially Weighted Moving Average) 的公式是:EWMA(t) = aY(t) + (1-a)EWMA(t-1),t = 1,2,.....,n;
表示的含义是:在t时刻,根据实际的观测值可以求取EWMA(t),其中,EWMA(t) 表示 t 时刻的估计值;Y(t) t时刻的测量值;n 所观察的总的时间;a(0 < a <1)表示对于历史测量值权重系数。
之所以称之为指数加权,是因为加权系数a是以指数式递减的,即各指数随着时间而呈现出指数式递减。系数a越接近1表示对当前抽样值的权重越高,对过去测量值得权重越低,估计值(器)的时效性就越强,反之,越弱。
这种现象可以描述为应付突变的平稳性,平稳性随着a的增大而减小。当设置较小的系数a时,得出的均值更大程度上是参考过去的测量值,在较小程度上参考当前值,表现出很强的平稳性;当设置较大的系数a,得出的均值更大程度上是参考当前的测量值,表现出很强的波动性。举个例子,对于序列,设置较大的指数a=0.8和较小的指数a=0.2,位置越靠后,得出的均值越接近或越远离当前值:
>>> s=pd.Series([1,2,3,4])
>>> s.ewm(alpha=0.8).mean()
0 1.000000
1 1.833333
2 2.774194
3 3.756410
dtype: float64
>>> s.ewm(alpha=0.2).mean()
0 1.000000
1 1.555556
2 2.147541
3 2.775068
dtype: float64
参考文档:
pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)的更多相关文章
- pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)
DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...
- pandas 学习 第2篇:Series -(创建,属性,转换和索引)
序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...
- pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)
长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...
- pandas 学习 第5篇:DataFrame - 访问数据框
数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...
- pandas 学习 第8篇:Index 对象 - (创建、转换、排序)
Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...
- pandas 学习 第1篇:pandas基础 - 数据结构和数据类型
pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...
- Pandas 学习 第9篇:DataFrame - 数据的输入输出
常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...
- pandas 学习 第十一篇:处理缺失值
Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...
- pandas 学习 第14篇:索引和选择数据
数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...
随机推荐
- 《Web Development with Go》JWT认证
时间晚了,先来一版调通的JWT普通认证, 明天再弄一个通过中间件,及gorilla,negroni库的认证, 这样正规些, 但认证通过之后,如何对应权限? 由于jwt-go从2升到3,还有rsa 10 ...
- Java 创建线程的3种方法及各自优势
1. 继承 Thread 类,然后调用 start 方法. class MyThread extends Thread { //重写run方法,线程运行后,跑的就是run方法 public void ...
- Django多数据库
每个app使用不同的数据库 1. 配置数据库连接 # settings.py # DATABASES中必须要有default字段 DATABASES = { 'default': { 'ENGINE' ...
- 雪崩利器 hystrix-go 源码分析
阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力. 之前的帖子说了一下微服务的雪崩效应和常见的解决方案,太水,没有上代码怎么叫解决方案.githu ...
- stars-one的原创工具——APK签名验证破解工具
ASCTool APk签名验证破解工具 APK Signature Crack Tool 本工具只对那些仅通过 PackageManager.getPackageInfo().signatures 来 ...
- 立 Flag
行动目标 立Flag时间 计划开始时间 开始时间 行动寄语 通关目标 打卡1 打卡2 打卡3 打卡4 打卡5 打卡6 C# 7.0 核心技术指南 2019-11-1 1号 1号 打好C#基础 看完.实 ...
- 爬虫最新的库requests-html库总结
requests-html是比较新的爬虫库,作者和requests是同一个作者 一.安装依赖 pip install requests-html 我们可以在安装的时候看到他安装了lxml,reuqes ...
- Dynamics 365触发Microsoft Flow自动生成PDF并作为附件送邮件
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Saltstack_使用指南18_API
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- Linux:FTP服务器的搭建
FTP服务器的简介 系统用户 即系统本机的用户.Linux一般不会针对实体用户进行限制,因此实体用户可以针对整个文件 系统进行工作.但通常不希望他们通过FTP方式远程访问系统. 虚拟用户 只能采用FT ...