前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >pandas中的窗口处理函数

pandas中的窗口处理函数

作者头像
生信修炼手册
发布于 2020-07-14 08:02:29
发布于 2020-07-14 08:02:29
2K00
代码可运行
举报
文章被收录于专栏:生信修炼手册生信修炼手册
运行总次数:0
代码可运行

滑动窗口的处理方式在实际的数据分析中比较常用,在生物信息中,很多的算法也是通过滑动窗口来实现的,比如经典的质控软件Trimmomatic, 从序列5'端的第一个碱基开始,计算每个滑动窗口内的碱基质量平均值,当滑动窗后的平均碱基质量值小于给定阈值时,去除该窗口以及之后的剩余碱基,以此达到去除低质量碱基的目的。

在pandas中,提供了一系列按照窗口来处理序列的函数。首先是窗口大小固定的处理方式,对应以rolling开头的函数,基本用法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> s = pd.Series([1, 2, 3, np.nan, 4])
>>> s.rolling(window=2).count()
0 1.0
1 2.0
2 2.0
3 1.0
4 1.0
dtype: float64

window参数指定窗口的大小,在rolling系列函数中,窗口的计算规则并不是常规的向后延伸,而是采用了向前延伸的方式。以上述代码为例,count函数用于计算每个窗口内非NaN值的个数,对于第一个元素1,再往前就是下标-1了,序列中不存在这个元素,所以该窗口内的有效数值就是1。对于第二个元素2,往前延伸1,此时窗口内的元素为1和2,有效数值为2。接下来依次类推,就可以得到完整的输出结果了。

对于一个窗口内的全部元素,除了计数外,还提供了以下多种功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 求和
>>> s.rolling(window=2).sum()
0 NaN
1 3.0
2 5.0
3 NaN
4 NaN
dtype: float64
# 均值
>>> s.rolling(window=2).mean()
0 NaN
1 1.5
2 2.5
3 NaN
4 NaN
dtype: float64
# 中位数
>>> s.rolling(window=2).median()
0 NaN
1 1.5
2 2.5
3 NaN
4 NaN
dtype: float64
# 方差
>>> s.rolling(window=2).var()
0 NaN
1 0.5
2 0.5
3 NaN
4 NaN
dtype: float64
# 标准差
>>> s.rolling(window=2).std()
0 NaN
1 0.707107
2 0.707107
3 NaN
4 NaN
dtype: float64
# 百分位数
>>> s.rolling(window=2).quantile(.4)
0 NaN
1 1.4
2 2.4
3 NaN
4 NaN
dtype: float64
# 最小值
>>> s.rolling(window=2).min()
0 NaN
1 1.0
2 2.0
3 NaN
4 NaN
dtype: float64
# 最大值
>>> s.rolling(window=2).max()
0 NaN
1 2.0
2 3.0
3 NaN
4 NaN
dtype: float64

除了单一功能的内置函数外,还提供了以下两种方式,agg可以聚合多个函数的结果,apply则提高了灵活性,允许自定义函数,用法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> s.rolling(window=2).agg({'A':'sum', 'B':'count'})
     A B
0  NaN  1.0
1  3.0  2.0
2  5.0  2.0
3  NaN  1.0
4  NaN  1.0

>>> s.rolling(window=2).apply(lambda x:np.nanmean(x))
0    NaN
1    1.5
2    2.5
3    NaN
4    NaN
dtype: float64

与固定窗口相对应,pandas还提供了一种窗口大小可变的处理方式,对应expanding函数,基本用法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> s
0 1.0
1 2.0
2 3.0
3 NaN
4 4.0
dtype: float64

>>> s.expanding(min_periods=2).count()
0 NaN
1 2.0
2 3.0
3 3.0
4 4.0
dtype: float64

min_periods参数指定窗口内最小的有效数值个数,只有当满足这个条件时,才进行后续运算,否则返回NaN。以上述代码为例,expanding的窗口也是向前延伸,不同之处在于它会延伸到起始的第一个元素。对于第一个元素而言,其窗口只有1个元素,不符合最小有效数值的要求,所以返回NaN。对于第二个元素而言,窗口内包含1和2两个元素;对于第三个元素而言,窗口内包含了1,2,3共3个元素,依次类推,就可以得到上述结果。

从上述逻辑可以发现,expanding实现了一种累积的计算方式。对于expanding系列函数而言,rolling对应的函数expanding也都有,部分函数示例如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> s.expanding(min_periods=2).mean()
0 NaN
1 1.5
2 2.0
3 2.0
4 2.5
dtype: float64
>>> s.expanding(min_periods=2).median()
0 NaN
1 1.5
2 2.0
3 2.0
4 2.5
dtype: float64
>>> s.expanding(min_periods=2).std()
0 NaN
1 0.707107
2 1.000000
3 1.000000
4 1.290994
dtype: float64
>>> s.expanding(min_periods=2).var()
0 NaN
1 0.500000
2 1.000000
3 1.000000
4 1.666667
dtype: float64

通过rolling和expanding系列函数,可以按照窗口的方式来灵活处理序列。

·end·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
pandas库的简单介绍(4)
排名这个功能目前我用的不怎么多,但还是简单说明一下。排名用到了rank方法。默认情况下,rank通过将平均排名分配到每个组来打破平级关系。
python数据可视化之路
2023/02/23
1.4K0
精选23个Pandas常用函数
从26个字母中精选出23个Pandas常用的函数,将它们的使用方法介绍给大家。其中o、y、z没有相应的函数。
皮大大
2023/08/23
2520
Numpy&Pandas
Numpy & Pandas 简介 此篇笔记参考来源为《莫烦Python》 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, 是 numpy 的升级版本。 消耗资源少:采用的是矩阵运算,会比 python 自带的字典或者列表快好多 Numpy 学习 2.1 numpy属性 ndim:维度 shape:行数和列数 size:元素个数 举例说明: import numpy as np array = np.array([[1,2,3],[2,3,4]])
闪电gogogo
2018/04/17
2.3K0
Numpy&Pandas
Pandas高级教程之:window操作
在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window 。Pandas提供了一个rolling方法,通过滚动window来进行统计计算。
程序那些事
2021/07/19
9090
图解pandas的窗口函数rolling
在我们处理数据,尤其是和时间相关的数据中,经常会听到移动窗口、滑动窗口或者移动平均、窗口大小等相关的概念。
皮大大
2023/04/08
3.2K0
图解pandas的窗口函数rolling
Pandas高级教程之:统计方法
数据分析中经常会用到很多统计类的方法,本文将会介绍Pandas中使用到的统计方法。
程序那些事
2021/07/08
5340
Pandas-14.统计函数
Pandas-14.统计函数 pct_change() Series,DataFrame和Panel都有pct_change()函数 将每个元素和前一个元素进行比较,计算变化百分比 默认列操作,通过axis = 1参数换成行 s = pd.Series([1,2,3,4,5,6,7]) print(s.pct_change()) ''' 0 NaN 1 1.000000 2 0.500000 3 0.333333 4 0.250000 5 0.200000 6
悠扬前奏
2019/05/29
7230
Python 数据分析(PYDA)第三版(五)
对数据集进行分类并对每个组应用函数,无论是聚合还是转换,都可能是数据分析工作流程的关键组成部分。加载、合并和准备数据集后,您可能需要计算组统计信息或可能需要为报告或可视化目的计算数据透视表。pandas 提供了一个多功能的groupby接口,使您能够以自然的方式切片、切块和总结数据集。
ApacheCN_飞龙
2024/05/24
2010
Python 数据分析(PYDA)第三版(五)
Pandas-16.聚合
Pandas-16.聚合 以如下代码作为例子: df = pd.DataFrame(np.random.randint(-10,10, (5,4)), index = pd.date_range('1/1/2020', periods=5), columns = ['A', 'B', 'C', 'D']) 在整个数据窗口内应用聚合 print(df) print(df.rolling(window=3,min_periods=1).aggre) ''' A
悠扬前奏
2019/05/29
4130
最完整的时间序列分析和预测(含实例及代码)
在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻所得到的离散数字组成的序列集合,称之为时间序列。
润森
2022/09/22
4.2K0
最完整的时间序列分析和预测(含实例及代码)
Pandas 2.2 中文官方教程和指南(二十一·一)
pandas 包含一组紧凑的 API,用于执行窗口操作 - 一种在值的滑动分区上执行聚合的操作。该 API 的功能类似于groupby API,Series和DataFrame调用具有必要参数的窗口方法,然后随后调用聚合函数。
ApacheCN_飞龙
2024/05/24
3830
《利用Python进行数据分析·第2版》第11章 时间序列11.1 日期和时间数据类型及工具11.2 时间序列基础11.3 日期的范围、频率以及移动11.4 时区处理时区本地化和转换11.5 时期及其
时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学、经济学、生态学、神经科学、物理学等。在多个时间点观察或测量到的任何事物都可以形成一段时间序列。很多时间序列是固定频率的,也就是说,数据点是根据某种规律定期出现的(比如每15秒、每5分钟、每月出现一次)。时间序列也可以是不定期的,没有固定的时间单位或单位之间的偏移量。时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(timestamp),特定的时刻。 固定时期(period),如2007年1月或201
SeanCheney
2018/04/24
6.6K0
《利用Python进行数据分析·第2版》第11章 时间序列11.1 日期和时间数据类型及工具11.2 时间序列基础11.3 日期的范围、频率以及移动11.4 时区处理时区本地化和转换11.5 时期及其
Python时间序列处理神器:Rolling 对象,3分钟入门 | 原创
Rolling 对象在处理时间序列的数据时,应用广泛,在Python中Pandas包实现了对这类数据的处理。
double
2019/09/18
8K0
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
deephub
2023/02/01
3.4K0
Pandas 数据处理学习
Pandas 是 Python 做数据分析最重要的模块之一,本文源自Pandas 作者 Wes McKinney 写的 10-minute tour of pandas。
李振
2021/11/26
3970
Python-for-data-移动窗口函数
.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>
皮大大
2021/03/01
2.2K0
Python-for-data-移动窗口函数
pandas知识点(基本功能)
1.重新索引 如果reindex会根据新索引重新排序,不存在的则引入缺省: In [3]: obj = Series([4.5,7.2,-5.3,3.6], index=["d","b","a","c"]) In [4]: obj Out[4]: d 4.5 b 7.2 a -5.3 c 3.6 dtype: float64 In [6]: obj2 = obj.reindex(["a","b","c","d","e"]) In [7]: obj2 Out[7]: a -5.3 b
py3study
2020/01/20
4210
带你玩转Pandas
21.对每种animal的每种不同数量visits,计算平均age,即,返回一个表格,行是aniaml种类,列是visits数量,表格值是行动物种类列访客数量的平均年龄
用户3577892
2020/06/10
6570
Pandas-15.window函数
Pandas-15.window函数 以如下代码作为测试基础: df = pd.DataFrame(np.random.randn(10, 4), index = pd.date_range('1/1/2020', periods=10),columns=["A", "B", "C","D"]) ''' A B C D 2020-01-01 1.423760 -0.901543 0.302208 -0.066452 2020-01-02 1.358759 -0.286
悠扬前奏
2019/05/29
5390
Pandas 2.2 中文官方教程和指南(二十·二)
有了 GroupBy 对象,通过分组数据进行迭代非常自然,类似于itertools.groupby()的操作:
ApacheCN_飞龙
2024/05/24
4920
Pandas 2.2 中文官方教程和指南(二十·二)
相关推荐
pandas库的简单介绍(4)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文