Pandas 适用于多列输出的滚动

2024-03-30

我正在编写一个代码,它将滚动窗口应用于将返回多列的函数。

输入:熊猫系列
预期输出:3 列 DataFrame

def fun1(series, ):
    # Some calculations producing numbers a, b and c
    return {"a": a, "b": b, "c": c} 

res.rolling('21 D').apply(fun1)

资源内容:

time
2019-09-26 16:00:00    0.674969
2019-09-26 16:15:00    0.249569
2019-09-26 16:30:00   -0.529949
2019-09-26 16:45:00   -0.247077
2019-09-26 17:00:00    0.390827
                         ...   
2019-10-17 22:45:00    0.232998
2019-10-17 23:00:00    0.590827
2019-10-17 23:15:00    0.768991
2019-10-17 23:30:00    0.142661
2019-10-17 23:45:00   -0.555284
Length: 1830, dtype: float64

Error:

TypeError: must be real number, not dict

我尝试过的:

  • 在 apply 中更改 raw=True
  • 在 apply 中使用 lambda 函数
  • 以列表/numpy 数组/数据帧/系列的形式返回 fun1 中的结果。

我还浏览了SO中的许多相关帖子,声明一些:

  • Pandas - 在多列上使用 `.rolling()` https://stackoverflow.com/questions/51615849/pandas-using-rolling-on-multiple-columns
  • 从 pandas.rolling_apply 返回两个值 https://stackoverflow.com/questions/22218438/returning-two-values-from-pandas-rolling-apply
  • 如何将函数应用于 Pandas 数据框的两列 https://stackoverflow.com/questions/13331698/how-to-apply-a-function-to-two-columns-of-pandas-dataframe
  • 将 pandas 函数应用于列以创建多个新列? https://stackoverflow.com/questions/16236684/apply-pandas-function-to-column-to-create-multiple-new-columns/16245109

但指定的解决方案均不能解决此问题。

有没有直接的解决方案?


这里有一个hacky回答使用rolling,生成一个 DataFrame:

import pandas as pd
import numpy as np

dr = pd.date_range('09-26-2019', '10-17-2019', freq='15T')
data = np.random.rand(len(dr))

s = pd.Series(data, index=dr)

output = pd.DataFrame(columns=['a','b','c'])

row = 0

def compute(window, df):
    global row
    a = window.max()
    b = window.min()
    c = a - b
    df.loc[row,['a','b','c']] = [a,b,c]
    row+=1    
    return 1
    
s.rolling('1D').apply(compute,kwargs={'df':output})

output.index = s.index

似乎是rolling apply函数总是期望返回一个数字,以便根据计算立即生成一个新的系列。

我正在通过制作一个新的来解决这个问题outputDataFrame(具有所需的输出列),并在函数内写入该数据帧。我不确定是否有办法获取滚动对象中的索引,所以我改为使用global增加写入新行的次数。鉴于以上几点,您需要return一些数字。所以虽然实际上rolling操作返回一系列1, output修改为:

In[0]:
s

Out[0]:
2019-09-26 00:00:00    0.106208
2019-09-26 00:15:00    0.979709
2019-09-26 00:30:00    0.748573
2019-09-26 00:45:00    0.702593
2019-09-26 01:00:00    0.617028
  
2019-10-16 23:00:00    0.742230
2019-10-16 23:15:00    0.729797
2019-10-16 23:30:00    0.094662
2019-10-16 23:45:00    0.967469
2019-10-17 00:00:00    0.455361
Freq: 15T, Length: 2017, dtype: float64

In[1]:
output

Out[1]:
                           a         b         c
2019-09-26 00:00:00  0.106208  0.106208  0.000000
2019-09-26 00:15:00  0.979709  0.106208  0.873501
2019-09-26 00:30:00  0.979709  0.106208  0.873501
2019-09-26 00:45:00  0.979709  0.106208  0.873501
2019-09-26 01:00:00  0.979709  0.106208  0.873501
                      ...       ...       ...
2019-10-16 23:00:00  0.980544  0.022601  0.957943
2019-10-16 23:15:00  0.980544  0.022601  0.957943
2019-10-16 23:30:00  0.980544  0.022601  0.957943
2019-10-16 23:45:00  0.980544  0.022601  0.957943
2019-10-17 00:00:00  0.980544  0.022601  0.957943

[2017 rows x 3 columns]

这感觉更像是一种利用rolling比预期用途,所以我有兴趣看到一个更优雅的答案。

UPDATE:感谢@JuanPi,您可以使用以下方式获取滚动窗口索引这个答案 https://stackoverflow.com/a/60918101/13386979。所以一个非global答案可能如下所示:

def compute(window, df):
    a = window.max()
    b = window.min()
    c = a - b
    df.loc[window.index.max(),['a','b','c']] = [a,b,c]  
    return 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 适用于多列输出的滚动 的相关文章

  • 补丁 - 为什么相对补丁目标名称不起作用?

    我已经从模块导入了一个类 但是当我尝试修补类名而不使用模块作为前缀时 出现类型错误 TypeError Need a valid target to patch You supplied MyClass 例如 以下代码给出了上述错误 imp
  • 为什么删除临时文件时出现WindowsError?

    我创建了一个临时文件 向创建的文件添加了一些数据 已保存 然后尝试将其删除 但我越来越WindowsError 编辑后我已关闭该文件 如何检查哪个其他进程正在访问该文件 C Documents and Settings Administra
  • Pandas:GroupBy 到 DataFrame

    参考这个关于 groupby 到 dataframe 的非常流行的问题 https stackoverflow com questions 10373660 converting a pandas groupby object to dat
  • Python - 来自 .进口

    我第一次尝试图书馆 我注意到解决图书馆内导入问题的最简单方法是使用如下结构 from import x from some module import y 我觉得这件事有些 糟糕 也许只是因为我不记得经常看到它 尽管公平地说我还没有深入研究
  • 如何在Python中同时运行两只乌龟?

    我试图让两只乌龟一起移动 而不是一只接着另一只移动 例如 a turtle Turtle b turtle Turtle a forward 100 b forward 100 但这只能让他们一前一后地移动 有没有办法让它们同时移动 有没有
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • sklearn 中的 pca.inverse_transform

    将我的数据拟合后 X 我的数据 pca PCA n components 1 pca fit X X pca pca fit transform X 现在 X pca 具有一维 当我根据定义执行逆变换时 它不是应该返回原始数据 即 X 二维
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Django send_mail SMTPSenderRefused 530 与 gmail

    一段时间以来 我一直在尝试使用 Django 从我正在开发的网站接收电子邮件 现在 我还没有部署它 并且我正在使用Django开发服务器 我不知道这是否会影响它 这是我的 settings py 配置 EMAIL BACKEND djang
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • 聚合函数在数据框中创建不需要的向量

    我在函数中创建数据帧时遇到了一个奇怪的问题 但是 在 data frame 之外使用相同的方法效果很好 这是基本函数 我用它来计算数据集的平均值 标准差和标准误差 aggregateX lt function formula dataset
  • 用 python 编写的数学语法检查器

    我需要的只是使用 python 检查字符串是否是有效的数学表达式 为了简单起见 假设我只需要 运算符 也作为一元 带有数字和嵌套括号 为了完整性 我还添加了简单的变量名称 所以我可以这样测试 test 3 2 1 valid test 3
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这

随机推荐

  • CallLog.Calls 处的 RuntimeException

    如果我尝试查询 有时在某些设备上会出现 RuntimeExceptionCallLog Calls 我查询的是CallLog Calls with contentProvider接听最后一个电话 有人可以帮助我为什么有时会出现此错误吗 我认
  • 从所有 WooCommerce 预订中获取所有人的总和

    我使用官方 woocommerce 预订插件 并尝试获取所有已预订产品的人员的数量 对于单个订单 没有问题 if is callable WC booking Data Store get booking ids from order id
  • 如何在iPhone中的plist中写入多个数组?

    我的应用程序中有十个数组 我想将这些数组值写入 文档目录 plist 是否可以将 10 个数组放入一个 plist 中 否则我将为每个数组创建单独的 plist 哪一个可以实现我的应用程序 请指导我并提供一些示例链接 Thanks 做你想做
  • 为什么c 库和语言定义_name,然后typedef 或pound 定义_name name?

    看来 C 库和语言有很多无用的类型名称 例如 C 有一个内置类型 Bool并且有一个宏stdbool h define bool Bool 为什么 C 没有bool内置而不是 Bool 我发现了更多的例子stdio h and stdlib
  • 使用 jquery 和 mvc razor 的 delimitir 问题

    我无法向同一字段添加几个值 我只能选择一个值 输入后 或其他分隔符 我无法选择另一个 我希望它的工作方式类似于自动完成 我有一个带有 jQ uery 绑定的文本框 div class editor field Html EditorFor
  • 打包应用程序时如何排除不必要的Qt *.so 文件?

    使用 PyInstaller 成功打包 PySide 应用程序后 我在包文件夹中发现了许多不同的 so 文件 我很惊讶地看到我在项目中没有使用的库 例如 libQt53DAnimation so libQt53DCore so libQt5
  • mysql中按月和年比较日期

    我有一个表 其中包含有关事件和节日的数据 并以下列记录其开始和结束日期 开始日期 End Date 日期格式为YYYY MM DD 我需要使用以下条件获取事件详细信息 需要获取以当前月份开始且结束日期可以是任何内容的所有事件currentD
  • 扩展访问表达式以检查值

    我目前正在尝试与表达式树进行斗争 以实现一些神奇的效果 但我不断遇到一个又一个的错误 我的一些域对象 实体框架 上有一些类似的属性 Expression
  • ZIO:如何只计算一次?

    我正在使用 ZIO https github com zio zio https github com zio zio in my build sbt dev zio zio 1 0 0 RC9 无论我尝试什么 每次需要时都会计算我的结果
  • C# Windows 窗体 - MenuItem 单击事件 - 获取 MenuItem 文本

    如何获取已单击的任何给定菜单项的文本 菜单是动态填充的 所以我似乎仅限于此 Menu MenuItems Add new MenuItem MenuName new EventHandler menu click 不幸的是 我看不到 Eve
  • Jenkins 在 Docker 容器内构建并生成报告

    我对 Jenkins 和 Docker 很陌生 即使经过一些研究 我也没有找到做这些事情的方法 我想要 在 docker 容器内的项目上执行 pytest 和 python coverage 这应该生成测试和覆盖率报告 访问生成的报告并使用
  • Chrome 下数字签名小程序的替代方案

    目前我们已经开发了一个可以使用java applet 对文档进行数字签名的系统 然而 随着 Chrome 下小程序的禁令 我们正在寻找数字签名的替代解决方案 目前签名的工作方式如下 HTTP GET 被发送到 servlet 以获取要发送的
  • Grails,使用会话中的值注入/填充域对象

    在我的应用程序中 许多类都有公共字段 公司 当应用程序保存该对象时 它们必须填写公司 对此进行了验证 公司也开会 现在 当我想使用域类作为命令对象时 公司必须已填写 否则我会收到验证错误 有什么方法可以在进行任何验证之前始终填写公司字段 这
  • 如何对时间轴上放置的点的值进行插值?

    我想创建不同位置 x 浓度随时间变化的插值图 如果可能的话 我想水平插值点 即随着时间的推移 以便为每个样本获得平滑的变色水平线 df lt data frame Concentration rnorm 30 Position rep c
  • jconn4.jar 的 Maven 存储库是什么?

    jConn3 是我唯一能找到的 com sybase jdbc3 jdbc jconn3 6 05 我的研究告诉我 jconn3 jar 和 jconn4 jar 是 Sybase jConnect 的一部分 为了下载 至少 最新版本的 j
  • “dat”协议能否有效支持视频直播?

    我希望能够通过以下方式实时流式传输视频 或任何其他大型且不断修改 附加的文件 dat Here https github com beakerbrowser webdb performance它说 dat 协议不支持文件级别的部分更新 这意
  • 将数组数据存储在卡中的简单示例

    我想了解如何使用自适应卡读取 写入数据 我可以从提交操作中读取数据 并以文本形式回复 但不确定如何在卡中呈现输入数据 首先 我想将 shotValue 添加到一个数组中 我可以在卡的生命周期中携带该数组 有人可以让我知道该怎么做吗 此问题的
  • 如何使用 html 在新选项卡中打开 pdf 文件的链接

    我有一个 html 页面 其中包含打开 pdf 文件的链接 然而 当我点击这个链接时 它会在 adobe reader 中打开 我已将目标属性设置为空白 但它也不起作用 我想在同一窗口的新选项卡中打开此 pdf 文件 target blan
  • 如何在 MVC 中的单个 foreach 循环中创建水平表?

    在 ASP Net MVC 中 有什么方法可以将以下代码压缩为单个 foreach 循环吗 table class table tr td Name td td td tr tr td Item td tr table
  • Pandas 适用于多列输出的滚动

    我正在编写一个代码 它将滚动窗口应用于将返回多列的函数 输入 熊猫系列预期输出 3 列 DataFrame def fun1 series Some calculations producing numbers a b and c retu