Pandas计算历史均值

news2024/11/24 2:19:10

在用Python进行时间序列分析时,我们可能经常需要计算历史的一些特征。一般会使用rolling()函数,这里介绍一下计算包括当前行的历史特征和不包括当前行的历史特征

1. 包括当前行

这里先简单介绍一下rolling()函数
pandas.DataFrame.rolling官方文档

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, step=None, method=‘single’)

常用参数解释:

  • window: 时间窗大小,一般为整数,表示向前观测n个数据
  • min_periods: 最小需要有值的观测点的数量
  • center: 是否使用当前行作为窗口的中间行
  • on: 对于多列的DataFrame, 用on指定使用哪列
  • axis: 0→行,1→列

举个例子

data = {'A': ['a','a','a','a','a','a','b','b','b','b','b'],
       'B': [1,4,5,7,5,9,6,1,4,5,6]}
df = pd.DataFrame(data)

在这里插入图片描述

获取每组当前行和上面两行(一共3行)的均值

# 这里可以对比一下前3个常用参数的区别
# mean()可以改成自己需要的公式
df['C'] = df.groupby(['A'])['B'].apply(lambda x: x.rolling(3).mean())
# df['C'] = df.groupby(['A'],as_index=False)['B'].rolling(3).mean()[['B']]
df['D'] = df.groupby(['A'])['B'].apply(lambda x: x.rolling(3,min_periods=1).mean())
df['E'] = df.groupby(['A'])['B'].apply(lambda x: x.rolling(3, center=True).mean())

在这里插入图片描述


2. 不包括当前行

但在使用rolling()获取前几行的数值进行计算时,都会包括当前行。如果我们的计算不想包括当前行的数值,我们还需要额外使用bfill()shift()进行计算

bfill()用于向后填充数值,相当于fillna(method='bfill')
pandas.DataFrame.bfill官方文档

shift()用于上下/左右移动数据
pandas.DataFrame.shift官方文档

继续用刚才的例子

# 向下移动
df['C'] = df.groupby(['A'])['B'].apply(lambda x: x.shift(1))
# 向上移动
df['D'] = df.groupby(['A'])['B'].apply(lambda x: x.shift(-1))

在这里插入图片描述

如果我们想计算不包括当前行的前面几行数据的均值,我们可以先计算当前行的下一行开始rolling()的均值,然后再往上移一行

# 先计算后面一行的rolling(3).mean()
df['C'] = df.groupby(['A'])['B'].apply(lambda x: x.rolling(3,1).mean().shift())
# 向上一行填充
df['final'] = df.groupby(['A'])['B'].apply(lambda x: x.rolling(3,1).mean().shift().bfill())

在这里插入图片描述

final那列就是我们计算不包括当前行的前三行的平均值


参考来源:
pandas groupby shift rank rolling 等用法详解
Pandas -计算组的滚动平均值,不包括当前行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库,计算机网络、操作系统刷题笔记19

数据库,计算机网络、操作系统刷题笔记19 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle…

Vue后台项目的记录 (二)

1、品牌静态管理组件 表单 分页器 2、品牌列表展示 创建相关接口文件 获取品牌管理数据的模块 统一接口管理 在main.js中引入,之后在任意组件中就可以使用了 发请求,获取品牌列表的接口 展示数据 current-change"handlecurrentchange curren…

贤鱼的刷题日常(数据结构队列学习)-2406:Card Stacking--题目详解

🏆今日学习目标: 🍀例题讲解2406:Card Stacking ✅创作者:贤鱼 ⏰预计时间:25分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:c 🍁贤鱼的个人社区,欢…

LabVIEW如何减少下一代测试系统中的硬件过时5

LabVIEW如何减少下一代测试系统中的硬件过时5 Steps to Replace Instruments Performance Requirements The important consideration to make when replacing instruments isthat the replacements must meet your requirements, usually by having equal orbetter measure…

6.1 微服务-Redis

6.1.1 Redis 6.1.1.1 前言 前面使用到的mysql数据库会出现以下问题 由于用户量增大,请求数量也随之增大,数据压力过大 多台服务器之间数据不同步 多台服务器之间的锁,已经不存在互斥性了。 6.1.1.2 Redis 6.1.1.2.1 什么是Redis Redi…

电脑屏幕录制怎么弄,简单好用的3种电脑录屏方法

平时工作或者学习都需要使用电脑进行录屏操作,比如录制线上网课、游戏画面、教学课程录屏等等。电脑屏幕录制怎么弄?可以使用专业录屏软件或者是电脑自带的屏幕录制功能来录屏;今天给大家分享3款简单好用的电脑录屏方法;无论是录制…

2022知识付费小程序源码升级版知识付费变现小程序独立后台版本源码+数据库和教程

知识付费小程序源码升级版主要功能简介: 本源码后台部分是thinkphp开发的,使用和二次开发都非常方便。 会员系统:用户登录/注册购买记录,收藏记录 基本设置:后台控制导航颜色,字体颜色,标题等…

软件测试面试话术 这样准备,让你成功拿到高薪offer

面试就是就是进入岗位前的临门一脚,如果因为准备不足而导致面试失败那可就亏大了!因此,为了帮助大家提高面试成功率,尽快拿到高薪offer,我为你们准备了一套面试话术以及技巧,希望对即将参加软件测试面试的你…

MyBatis一级缓存和二级缓存

缓存的作用 在 Web 系统中,最重要的操作就是查询数据库中的数据。但是有些时候查询数据的频率非常高,这是很耗费数据库资源的,往往会导致数据库查询效率极低,影响客户的操作体验。于是可以将一些变动不大且访问频率高的数据&…

六、Java 13 新特性

六、Java 13 新特性 Java 13 已如期于 9 月 17 日正式发布,此次更新是继半年前 Java 12 这大版本发布之后的一次常规版本更新,在这一版中,主要带来了 ZGC 增强、更新 Socket 实现、Switch 表达式更新等方面的改动、增强。本文主要针对 Java 1…

开发检查测试参考文档整理

前言 【1】比起成为一名优秀的程序员,我更青睐于成为一名有价值的靠谱的员工。在企业工作中,我们既需要很好的去完成我们的日常需求,同时也需要去保证我们编写代码的质量,减少问题的发生,我们要去做靠谱的有责任心的员…

【Arduino串口数据保存到excel中常用三种方法】

【Arduino串口数据保存到excel中常用三种方法】 1. 前言2. 利用excel自带Data Streamer读取2.1 启用 Data Streamer 加载项2.2 刷写代码并将微控制器连接到你的电脑2.3 excel画图记录3. 采用插件ArduSpreadsheet读取3.1 安装ArduSpreadsheet3.2 Arduino 代码4. python代码解析4…

pyTorch入门(五)——训练自己的数据集

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1749字,预计阅读5分钟 前言 前面四篇将Minist数据集的训练及OpenCV的推理都介绍完了,在实际应用项目中,往往需要用自己的数据集进行训练,所以本篇就专门介绍…

UCOS-III任务堆栈溢出检测及统计任务堆栈使用量的方法

1、说在前 在操作系统任务设计的时候,通常会遇到一个比较麻烦的问题,也就是任务堆栈大小设定的问题,为此我们我需要知道一些问题: 1.1. 任务堆栈一但溢出,意味着系统的崩溃,在有MMU或者MPU的系统中&#xf…

linux centons安装cpolar内网穿透

Linux操作系统在个人电脑上并不多见,但在需要集中资源处理信息交互的服务器上,Linux系统却几乎是唯一的存在。而cpolar凭借极极低的资源占用和便捷操作,十分适合在linux系统上使用。今天,我们就为大家介绍,如何在linux…

判断变量是否为数组及通用判断数据类型方法

判断变量是不是数组类型 function fn() {console.log(Array.isArray(arguments)); //false; 因为arguments是类数组,但不是数组console.log(Array.isArray([1,2,3,4])); //trueconsole.log(arguments instanceof Array); //fasleconsole.log([1,2,3,4] instance…

python中利用tkinter和ImageTK进行圣诞快乐图片的显示

一、前言 python中使用tkinter加载“Merry Christmas“ 图片。 二、用python显示Merry Christmas图片 1. python中,tkinter中可以进行图形界面编程。tkinter库提供了各种控件,其中,可以使用PhotoImage和Label组合,进行“Merry Chr…

【树莓派不吃灰】网络篇 Tcpdump iptables

目录1、一台主机上只能保持最多 65535 个 TCP 连接吗?2、tcpdump3、iptables❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-12-26 ❤️❤️ 本篇更新记录 2022-12-26 ❤️🎉 欢迎关注 🔎点…

RT-Thread 学习笔记(十四)--- 开启基于RTGUI的LCD显示功能(4)<demo组件的按键响应和焦点支持>

软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2 硬件环境:Armfly STM32F103ZE-EK v3.0开发板 参考文章:RT-Thread编程指南 RT-Thread_1.2.0lwiprtgui0.8.0 移植心得 RT-Thread RT…

2022/12/26 请你谈谈数据库事务机制?

1 事务四大特征 一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability&#…