pandas.groupby 对象上尊重时间的移动平均值

2024-03-28

给定一个以下格式的 pandas 数据框:

toy = pd.DataFrame({
'id': [1,2,3,
       1,2,3,
       1,2,3],
'date': ['2015-05-13', '2015-05-13', '2015-05-13', 
         '2016-02-12', '2016-02-12', '2016-02-12', 
         '2018-07-23', '2018-07-23', '2018-07-23'],
'my_metric': [395, 634, 165, 
              144, 305, 293, 
              23, 395, 242]
})
# Make sure 'date' has datetime format
toy.date = pd.to_datetime(toy.date)

The my_metric列包含一些(随机)指标,我希望计算一个与时间相关的移动平均值,以该列为条件id并在我自己指定的某个指定时间间隔内。我将把这个时间间隔称为“回溯时间”;可能需要 5 分钟 或2年。为了确定回溯计算中要包含哪些观测值,我们使用date列(如果您愿意,可以是索引)。

令我沮丧的是,我发现使用 pandas 内置函数不容易执行这样的过程,因为我需要有条件地执行计算 在id同时,计算只能对回溯时间内的观察进行(使用date柱子)。因此,输出数据帧应该由每一行组成id-date组合,与my_metric现在,该列是回溯时间内(例如 2 年,包括今天的日期)内包含的所有观察值的平均值。

为了清楚起见,我在使用 2 年回溯时间时包含了具有所需输出格式的图形(对过大的图形表示歉意):

我有一个解决方案,但它没有使用特定的 pandas 内置函数,并且可能不是最优的(列表理解和单个 for 循环的组合)。我正在寻找的解决方案不会使用 for 循环,因此更具可扩展性/高效/快速。

谢谢你!


计算回溯时间:(Current_year - 2 年)

from dateutil.relativedelta import relativedelta
from dateutil import parser
import datetime

In [1691]: dt = '2018-01-01'

In [1695]: dt = parser.parse(dt)

In [1696]: lookback_time = dt - relativedelta(years=2)

现在,根据回溯时间过滤数据帧并计算滚动平均值

In [1722]: toy['new_metric'] = ((toy.my_metric + toy[toy.date > lookback_time].groupby('id')['my_metric'].shift(1))/2).fillna(toy.my_metric)

In [1674]: toy.sort_values('id')
Out[1674]: 
        date  id  my_metric  new_metric
0 2015-05-13   1        395       395.0
3 2016-02-12   1        144       144.0
6 2018-07-23   1         23        83.5
1 2015-05-13   2        634       634.0
4 2016-02-12   2        305       305.0
7 2018-07-23   2        395       350.0
2 2015-05-13   3        165       165.0
5 2016-02-12   3        293       293.0
8 2018-07-23   3        242       267.5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas.groupby 对象上尊重时间的移动平均值 的相关文章

  • 如何用spaCy获取依赖树?

    我一直在尝试寻找如何使用 spaCy 获取依赖树 但我找不到任何有关如何获取树的信息 只能在如何导航树 https spacy io usage examples subtrees 如果有人想轻松查看 spacy 生成的依赖关系树 一种解决
  • 蟒蛇 |如何将元素随机添加到列表中

    有没有一种方法可以将元素随机添加到列表中 内置函数 ex def random append lst a lst append b lst append c lst append d lst append e return print ls
  • 无法将 datetime.datetime 与 datetime.date 进行比较

    我有以下代码并收到上述错误 由于我是 python 新手 我无法理解这里的语法以及如何修复错误 if not start or date lt start start date 有一个datetime date 从日期时间转换为日期的方法
  • 返回不包括指定键的字典副本

    我想创建一个函数 返回字典的副本 不包括列表中指定的键 考虑这本词典 my dict keyA 1 keyB 2 keyC 3 致电without keys my dict keyB keyC 应该返回 keyA 1 我想用一行简洁的字典理
  • 如何从网站中提取冠状病毒病例?

    我正在尝试从网站中提取冠状病毒 https www trackcorona live https www trackcorona live 但我得到了一个错误 这是我的代码 response requests get https www t
  • 如何在 openpyxl 中设置或更改表格的默认高度

    我想通过openpyxl更改表格高度 并且我希望首先默认一个更大的高度值 然后我可以设置自动换行以使我的表格更漂亮 但我不知道如何更改默认高度 唯一的到目前为止 我知道更改表格高度的方法是设置 row dimension idx heigh
  • 基于 True/False 值的 Python 优雅赋值

    我想根据三个布尔值中的值设置一个变量 最直接的方法是 if 语句后跟一系列 elif if a and b and c name first elif a and b and not c name second elif a and not
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 一起使用 Argparse 和 Json

    我是 Python 初学者 我想知道 Argparse 和 JSON 是否可以一起使用 说 我有变量p q r 我可以将它们添加到 argparse 中 parser add argument p param1 help x variabl
  • 在 Windows 上将 Word2vec 与 Tensorflow 结合使用

    In 本教程文件 https github com tensorflow models blob master tutorials embedding word2vec py L45通过 Tensorflow 找到以下行 第 45 行 来加
  • 如何检查包含 NaN 的列表 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在我的 for 循环中 我的代码生成一个如下所示的列表 list 0 0 0 0 sum 0 0 0 0 该循环生成所有其他数字向量 但它也
  • 如何在 Keras 中使用部分输入进行训练,其余部分用于损失函数

    我是 Keras 新手 正在尝试实现神经网络机器学习模型 输入张量看起来像 X1 X2 和输出 Y 注意 X1 和 X2 是相关的 在模型中 只有 X1 将用于训练 但 X1 和 X2 都将传递给损失函数 该损失函数是 X1 X2 y pr
  • 如何使用to_sql将pandas数据帧写入oracle数据库?

    我是一个新的oracle学习者 我正在尝试将 pandas 数据帧写入 oracle 表中 经过网上研究 我发现代码本身很简单 但我不知道为什么我的代码不起作用 我已经从本地文件中读取了 pandas 数据框 import cx Oracl
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • 使用 pandas 绘制带有误差线的条形图

    我正在尝试从 DataFrame 生成条形图 如下所示 Pre Post Measure1 0 4 1 9 这些值是我从其他地方计算出来的中值 我还有它们的方差和标准差 以及标准误差 我想将结果绘制为具有适当误差线的条形图 但指定多个误差值
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • Python“self”关键字[重复]

    这个问题在这里已经有答案了 我是 Python 新手 通常使用 C 最近几天开始使用它 在类中 是否需要在对该类的数据成员和方法的任何调用前添加前缀 因此 如果我在该类中调用方法或从该类获取值 我需要使用self method or sel
  • 使用Python重命名目录中的多个文件

    我正在尝试使用以下 Python 脚本重命名目录中的多个文件 import os path Users myName Desktop directory files os listdir path i 1 for file in files
  • 获取运行云功能的运行时服务帐户

    有没有办法以编程方式从云功能获取运行时服务帐户的电子邮件 我知道我可以 猜测 默认的 App Engine 帐户 因为它始终是 appspot gserviceaccount com 但这不是我想要的 我本来期待有一些环境变量 https

随机推荐

  • C# 上的 DrawString 文本太粗体

    我已经使用GDIDrawString绘制文本的方法 当程序运行时 屏幕上的文字看起来很好 但是一旦我将文件保存到图像中 字体就会比以前更粗 正常的会加粗 加粗的会更加粗 这该如何处理呢 public override void DrawTo
  • 如何在 Pug 文件中插入原始 HTML(不包括外部 HTML 文件)

    所以我想要的是将一些多行 HTML 放入 Pug 文件中 但在任何地方都找不到如何执行此操作 Example html head body div a href lala blabla a div p hihuhohoo Pug text可
  • 在本地网络中推送通知

    我需要在无法访问 Internet 的本地网络中使用我自己的服务器来实现 Android 和 iOS 的推送通知 更准确地说 我的用户将拥有一个移动应用程序 Android 和 iOS 它将通过无线网络连接到本地服务器 该网络不会有任何 I
  • Josh Smith 的 MVVM 示例中的视图是如何构建的?

    作为 WPF 和 MVVM 的新手 我正在学习Josh Smith 关于 MVVM 模式的文章 http msdn microsoft com en us magazine dd419663 aspx以及随附的示例代码 我可以看到该应用程序
  • AWS-Lambda 可以使用调用 C 的 Python 吗?

    我有一个进行图像比较的 C 库和调用它的 Python 我在 AWS Lambda 功能列表中没有看到 C 或 C 运行时 然而 Python 本身不是调用 C 的吗 我以为翻译其实是C 我们可以在 AWS Lambda 上运行从 Pyth
  • RESTful WCF Web 服务 POST 问题

    我无法将参数传递给 wcf web 服务 我的网络方法 OperationContract WebInvoke Method POST ResponseFormat WebMessageFormat Json UriTemplate pla
  • 有关 SQL Server 中重音不敏感的问题 (Latin1_General_CI_AS)

    我们所有的数据库都是使用默认排序规则安装的 Latin1 General CI AS 我们计划更改排序规则 以允许客户端不区分重音地搜索数据库 问题 不区分重音的数据库有哪些负面影响 如果有的话 不区分重音的数据库是否有任何性能开销 为什么
  • 复选框不显示 Chrome - 在其他浏览器中工作

    我不确定发生了什么事 记住我 左侧应该有一个复选框 底部应该有两个测试复选框 因为我有一辆自行车 我有一辆汽车 它们在 Firefox 中显示 但在 Chrome 中不显示 我相信我有 CSS 问题 但找不到它 有人可以帮忙吗 http w
  • Python ord 函数中的多个字符

    编程初学者在这里 Python 2 7 是否有解决方法可以在 Python 的 ord 函数中使用多个字符 例如 我有一个十六进制字符串 xff x1a 我想要它的十进制值 以便我可以将其与其他十六进制字符串求和 但是 ord 只接受单个十
  • 在C中从键盘获取输入而不用“return”

    在 C Mac OS 中 如何在不按 return 的情况下从键盘获取输入 在带有终端的类 Unix 系统上 我认为 MacOS X 符合要求 那么您需要将终端设置为所谓的 cbreak 模式 重点是terminal保留数据直到按下 ret
  • 尽管导入了类,但未定义类

    我似乎遇到了一个非常令人困惑的错误 尽管导入了包含我的类的 py 文件 Python 仍然坚持认为该类实际上并不存在 testmodule py中的类定义 class Greeter def init self arg1 None self
  • 在我的 android studio 模拟器中元素相互重叠

    我是新来的Android Studio 当我创建应用程序时 所有元素都相互重叠 我不知道如何编辑这段代码 请给我详细的描述 布局编辑器和模拟器结果 布局代码
  • Spark 执行器上的对象缓存

    对于 Spark 专家来说 这是一个很好的问题 我正在处理数据map操作 RDD 在映射器函数中 我需要查找类的对象A用于处理 RDD 中的元素 由于这将在执行器上执行并创建类型的元素A 将被查找 恰好是一个昂贵的操作 我想在每个执行器上预
  • PHP:如何检查 URL 是 Youtube 还是 vimeo

    如何编写一个函数来检查提供的 URL 是 youtube 还是 vimeo 例如 我将这两个 URL 作为字符串存储在数据库中 http vimeo com 24456787 http www youtube com watch v rj1
  • 使用 groupby 和 Mean() 在 Pandas 中保留一个包含分类变量的列

    有没有办法在之后保留分类变量groupby and mean 例如 给定数据框df ratio Metadata A Metadata B treatment 0 54265 937500 B10 1 AB cmpd 01 11 10736
  • 如何在内容可编辑 iframe 内创建非内容可编辑 div?

    我需要将内容可编辑的 iframe 内的某些部分设置为不可编辑 我怎么做 下面的代码在 Chrome 中有效 但在 Firefox 中无效 一切都可以在 Firefox 中编辑 我需要复选框不可编辑 Editable text div di
  • Azure 中虚拟机和应用服务之间的 Vnet

    我不知道如何连接网络应用程序 应用服务 to a 虚拟机在蔚蓝中 我已从 Web 应用程序配置面板创建了 VNet 所有项目都是使用创建的资源管理型号 都在同一个订阅并且至少是Standard定价层 显然 Web 应用程序无法连接到 V2
  • 警告会话 0x0 服务器为空、意外错误、关闭套接字连接并尝试重新连接

    我有两个节点 每个节点上都安装了带有Mesos marathon和zookeeper的docker 这是我在主节点上的 docker compose 文件 version 3 7 services zookeeper image ubunt
  • SQL Server 锁解释

    下面是 SQL Server 2000 支持的锁列表 我对 意图 锁的实际含义有点困惑 我在网上查了一下 答案似乎有点神秘 为了进一步获得我的具体问题的答案 我希望将此问题用作 Wiki 了解每个锁的含义以及在什么情况下将获取该类型的锁 S
  • pandas.groupby 对象上尊重时间的移动平均值

    给定一个以下格式的 pandas 数据框 toy pd DataFrame id 1 2 3 1 2 3 1 2 3 date 2015 05 13 2015 05 13 2015 05 13 2016 02 12 2016 02 12 2