Pandas DataFrame MultiIndex groupby 滚动操作缺少日期

2024-04-26

我有一个数据框,其中有一个 MultiIndex,其中索引的最后一列是日期。我正在尝试以特定频率对列进行滚动操作。据我了解,如果我有 TimeIndex,通常的 pandas 方法是使用频率字符串调用滚动函数(例如,如果我希望窗口为两天,则为“2D”)。建议的另一种方法是对 TimeIndex 重新采样,然后使用整数 2 应用滚动函数。本质上,我想要做的是按除最后一列之外的所有列进行分组,然后告诉滚动列使用最后一列timedelta 特定的滚动。下面是一个示例来演示这一点:

from datetime import datetime
import pandas as pd
multi_index = pd.MultiIndex.from_tuples([
    ("A", datetime(2017, 1, 1)), 
    ("A", datetime(2017, 1, 2)), 
    ("A", datetime(2017, 1, 3)), 
    ("A", datetime(2017, 1, 4)),
    ("B", datetime(2017, 1, 1)),
    ("B", datetime(2017, 1, 3)),
    ("B", datetime(2017, 1, 4))])
df = pd.DataFrame(index=multi_index, data={"colA": [1, 1, 1, 1, 1, 1, 1]})
display(df)
df.groupby([df.index.get_level_values(0), pd.Grouper(freq="1D", level=-1)]).sum().rolling(2).sum

上面的代码不会为 (B, datetime(2017, 1, 2)) 创建行,因此滚动总和将全部为两个。

解决这个问题的一种丑陋的方法是在滚动之前进行 unstack、fillna 和 stack,这种方法只有在有一个组拥有所有时间的情况下才有效:

df.groupby([df.index.get_level_values(0), pd.Grouper(freq="1D", level=-1)]
).sum().unstack().fillna(0).stack().rolling(2).sum()

不用说,这是一个丑陋的黑客行为,缓慢且容易出错。有没有一种好的方法可以在不进行大量操作的情况下实现我在这里需要的东西?理想情况下,有什么方法可以告诉石斑鱼获取时间戳列或自行填充缺失值?


您可以使用groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html + resample http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html + fillna http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html- 需要版本熊猫0.19.0 http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#other-enhancements:

multi_index = pd.MultiIndex.from_tuples([
    ("A", datetime(2017, 1, 1)), 
    ("A", datetime(2017, 1, 2)), 
    ("A", datetime(2017, 1, 3)), 
    ("A", datetime(2017, 1, 4)),
    ("B", datetime(2017, 1, 1)),
    ("B", datetime(2017, 1, 3)),
    ("B", datetime(2017, 1, 4))])
df = pd.DataFrame(index=multi_index, data={"colA": [1, 2, 3, 4, 1, 2, 3]})
print (df)
              colA
A 2017-01-01     1
  2017-01-02     2
  2017-01-03     3
  2017-01-04     4
B 2017-01-01     1
  2017-01-03     2
  2017-01-04     3

b = df.groupby(level=0).resample('1D', level=1).sum().fillna(0).rolling(2).sum()
print (b)
              colA
A 2017-01-01   NaN
  2017-01-02   3.0
  2017-01-03   5.0
  2017-01-04   7.0
B 2017-01-01   5.0
  2017-01-02   1.0
  2017-01-03   2.0
  2017-01-04   5.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas DataFrame MultiIndex groupby 滚动操作缺少日期 的相关文章

  • 如何 json_normalize() df 中的特定字段并保留其他列? [复制]

    这个问题在这里已经有答案了 这是我的简单示例 我的实际数据集中的 json 字段非常嵌套 因此我一次解压一层 我需要在 json normalize 之后保留数据集上的某些列 https pandas pydata org docs ref
  • 蟒蛇 |如何将元素随机添加到列表中

    有没有一种方法可以将元素随机添加到列表中 内置函数 ex def random append lst a lst append b lst append c lst append d lst append e return print ls
  • 如何在“python setup.py test”中运行 py.test 和 linter

    我有一个项目setup py文件 我用pytest作为测试框架 我还在我的代码上运行各种 linter pep8 pylint pydocstyle pyflakes ETC 我用tox在多个 Python 版本中运行它们 并使用以下命令构
  • 将 Django 表单中的所有 CharField 表单字段输入转换为小写

    我使用 Django 表单进行用户注册 用户可以在其中输入优惠券代码 我希望在优惠券代码字段中输入的所有字符都转换为小写 我尝试过在保存方法 自定义清理方法和自定义验证器中使用 lower 但这些方法没有运气 下面是我的代码 class S
  • 无法安装时间模块

    我试过了pip install time and sudo H pip install time 但我不断收到错误 找不到满足要求时间的版本 从 版本 未找到时间匹配的发行版 我正在 PyCharm 中工作 但真正没有意义的是我可以在 Py
  • 我有一个 Employee 类,我想返回“姓名”列表

    我有一个 Employee 类 我想返回 姓名 列表 雇员 py class Employee object def init self id name members None self id id self name name self
  • 以编程方式将列名称添加到 numpy ndarray

    我正在尝试将列名称添加到 numpy ndarray 然后按名称选择列 但这不起作用 我无法判断问题是在添加名称时出现 还是在稍后尝试调用它们时出现 这是我的代码 data np genfromtxt csv file delimiter
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • 如何在 Keras 中使用部分输入进行训练,其余部分用于损失函数

    我是 Keras 新手 正在尝试实现神经网络机器学习模型 输入张量看起来像 X1 X2 和输出 Y 注意 X1 和 X2 是相关的 在模型中 只有 X1 将用于训练 但 X1 和 X2 都将传递给损失函数 该损失函数是 X1 X2 y pr
  • 如何在python中递归复制目录并覆盖全部?

    我正在尝试复制 home myUser dir1 及其所有内容 及其内容等 home myuser dir2 在Python中 此外 我希望副本覆盖中的所有内容dir2 It looks like distutils dir util co
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 如何使用to_sql将pandas数据帧写入oracle数据库?

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

    我花了很长时间试图弄清楚这一点 我基本上正在尝试开发一个网站 当用户单击特定按钮时 我必须在其中执行 python 脚本 在研究了 Stack Overflow 和 Google 之后 我需要配置 Apache 以便能够运行 CGI 脚本
  • django如何将字符串转换为模块?

    我试图了解 django 的另一个神奇之处 它可以将字符串转换为模块 In settings py INSTALLED APPS声明如下 INSTALLED APPS django contrib auth django contrib c
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • Python“self”关键字[重复]

    这个问题在这里已经有答案了 我是 Python 新手 通常使用 C 最近几天开始使用它 在类中 是否需要在对该类的数据成员和方法的任何调用前添加前缀 因此 如果我在该类中调用方法或从该类获取值 我需要使用self method or sel
  • 字母尺度和随机文本上的马尔可夫链

    我想使用 txt 文件中的一本书中的字母频率生成随机文本 以便每个新字符 string lowercase 取决于前一个 如何使用马尔可夫链来做到这一点 或者使用每个字母都有条件频率的 27 个数组更简单 我想使用来自的字母频率生成随机文本
  • 使用Python重命名目录中的多个文件

    我正在尝试使用以下 Python 脚本重命名目录中的多个文件 import os path Users myName Desktop directory files os listdir path i 1 for file in files
  • 如何使用 FastAPI 在 HTMX 前端中使用 HX-Redirect?

    我试图在登录后在前端重定向 我像这样从我的 htmx 前端发出请求
  • Django - 缺少 1 个必需的位置参数:'request'

    我收到错误 get indiceComercioVarejista 缺少 1 个必需的位置参数 要求 当尝试访问 get indiceComercioVarejista 方法时 我不知道这是怎么回事 views from django ht

随机推荐

  • RSelenium:抓取加载缓慢的动态加载页面

    我不确定是否是因为我的网速很慢 但我正在尝试抓取一个在您向下滚动页面时加载信息的网站 我正在执行一个转到页面末尾的脚本 并等待 Selenium Chrome 服务器加载附加内容 服务器确实更新并加载新内容 因为我能够抓取最初不在页面上的信
  • 如何在python中获得逻辑正确的二进制移位

    正如标题所示 JavaScript 中有一个特定的运算符 gt gt gt 例如 在 JavaScript 中我们将得到以下结果 1000 gt gt gt 3 536870787 1000 gt gt 3 125 1000 gt gt g
  • Glass 的 SpeechRecognizer 权限不足错误

    我正在使用 GDK 先睹为快构建一个应用程序 但在沉浸式应用程序中无法进行语音识别 这是我的第一个安卓项目 我试着遵循这个 如何在 Android 手机中使用语音识别而不出现烦人的对话框 https stackoverflow com qu
  • SQL-计算数字列值的增加百分比

    我想根据 SQL 数据库中获得的值计算一些趋势 我特别感兴趣的是获取一列中值的增加百分比 如果值减少 则该值应该为负数 有人可以建议我该怎么做吗 我无法使用存储过程 Thanks 我的表有以下列 日期 数字 月份 数字 订单 数字 价格 实
  • 如何静态断言可变参数模板的参数包中的值?

    我正在创建一个可变参数模板 假设我有这样的东西 template
  • Android 媒体播放器使用服务

    我创建了一个MediaPlayer播放 mp3 文件的类 一切都很好 然后我的播放器在后台停止播放 我发现我的问题是我没有在服务中创建它 所以我开始阅读有关服务的信息 以了解如何创建一个服务并将其用于我的播放器 我的问题是 在服务和应用程序
  • Susy:根据屏幕尺寸改变列数

    在 Compass Sass 插件中 Susy http susy oddbird net 您可以在 base scss 文件中设置列数 对于桌面视图 我喜欢有 12 列 然而 对于移动视图来说 这列太多了 有没有办法更改移动显示的列数 我
  • 奇怪的 if 语句

    我发现这很奇怪if 别人代码中的语句 if variable 1 0 我不明白 它应该有两个 right 有人可以解释一下吗 条件式是一个按位运算符 https wiki python org moin BitwiseOperators比较
  • Rails 管理自定义:将 html 视图嵌入到仪表板中

    我们已从 Rails 管理起始页面删除了仪表板和历史记录 现在我们想嵌入一个谷歌分析页面 供用户查看 GA 的仪表板 该页面由一些简单的 HTML 组成 问题 如何在 Rails 管理仪表板中嵌入 html 页面 答案很简单 我需要创建以下
  • Windows 上 python 的长路径 - os.stat() 对于相对路径失败?

    我想访问 Windows 上的一些长 UNC 路径 我知道我需要使用 UNC 前缀 即 UNC 如果你逃脱了斜线 效果很好 os stat UNC server example com that has long path aaaaaaaa
  • 静态方法和实例方法的方法参考

    对于 Java 中的实例方法 我无法理解方法引用的概念 例如 在下面的示例中 编译器在列表行中给出错误 我看过 String toUpperCase 的例子 我对这一点感到困惑 1 String是类 toUpperCase是实例方法 Jav
  • 当用户单击控制台窗口时代码停止执行

    我有一个控制台应用程序 无需用户交互即可执行我的代码 如果用户有意或无意地在控制台窗口内单击 所有执行都会停止 这与从控制台窗口复制文本有关 应用程序再次开始执行的唯一方法是用户选择文本 然后右键单击控制台窗口 将其复制到剪贴板 要查看实际
  • 新用户创建后使用 Dropzone.js 上传,发送标头

    我正在使用一个很棒的插件 dropzone js dropzonejs com 来让我的网站在注册新用户时更加漂亮 基本上 用户填写一个表单 将几个图像放入 dropzone 然后单击 提交 这会触发一个 ajax 调用 将表单发布到 ph
  • Safari 扩展弹出窗口链接

    是否可以在 Safari 弹出窗口中使用链接 我已经做了我能想到的所有事情 但似乎向弹出窗口添加链接只会改变外观 并且不会导致任何可点击的内容 无论是使用 href 还是 onclick 您可以在 href 或 div 上添加 onclic
  • asp.net mvc 树路径的复杂路由

    我想知道如何定义这样的路由映射 TreePath Action Id TreeMap 是从数据库动态加载的 如下所示 Gallery GalleryA SubGalleryA View 3 您可以创建自定义路由处理程序来执行此操作 实际路线
  • 当我从 Django 应用程序“打印”它们时,它们会去哪里?

    我在 Linux 服务器上有一个 Django 应用程序 在其中一种观点中 某种形式print命令被执行 并打印一些字符串 我怎样才能知道打印的字符串是什么 是否有一些日志保存这些东西 输出应该在 django 启动的终端中 如果你不直接启
  • Cassandra 中的强一致性

    根据datastax文章 可以保证强一致性 如果 R W gt N 在哪里 R是读操作的一致性级别 W为写操作的一致性级别 N 是副本数 这里的强一致性是什么意思呢 这是否意味着 每次 从数据库给出查询响应时 响应将 始终 是最后更新的值
  • 跨 AVX 通道的最佳方式是什么?

    有些问题具有类似的标题 但我的问题涉及其他地方未涵盖的一个非常具体的用例 我有 4 个 128d 寄存器 x0 x1 x2 x3 我想将它们的内容重新组合在 5 个 256d 寄存器 y0 y1 y2 y3 y4 中 以准备其他计算 on
  • 使用 C#/C++ 托管 VST/DX 仪器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我试图了解用 C 或 C 构建准系统虚拟仪器主机所需的工作量 但我无法获得任何硬信息 有人知道有什么好的
  • Pandas DataFrame MultiIndex groupby 滚动操作缺少日期

    我有一个数据框 其中有一个 MultiIndex 其中索引的最后一列是日期 我正在尝试以特定频率对列进行滚动操作 据我了解 如果我有 TimeIndex 通常的 pandas 方法是使用频率字符串调用滚动函数 例如 如果我希望窗口为两天 则