根据 Pandas 中的日期窗口计算值的累积出现次数

2024-01-12

我有一个DataFrame (df)看起来像下面这样:

+----------+----+
| dd_mm_yy | id |
+----------+----+
| 01-03-17 | A  |
| 01-03-17 | B  |
| 01-03-17 | C  |
| 01-05-17 | B  |
| 01-05-17 | D  |
| 01-07-17 | A  |
| 01-07-17 | D  |
| 01-08-17 | C  |
| 01-09-17 | B  |
| 01-09-17 | B  |
+----------+----+

这是我想计算的最终结果:

+----------+----+-----------+
| dd_mm_yy | id | cum_count |
+----------+----+-----------+
| 01-03-17 | A  |         1 |
| 01-03-17 | B  |         1 |
| 01-03-17 | C  |         1 |
| 01-05-17 | B  |         2 |
| 01-05-17 | D  |         1 |
| 01-07-17 | A  |         2 |
| 01-07-17 | D  |         2 |
| 01-08-17 | C  |         1 |
| 01-09-17 | B  |         2 |
| 01-09-17 | B  |         3 |
+----------+----+-----------+

Logic

计算值的累积出现次数id但在指定的时间窗口内,例如4 months。即每 5 个月计数器重置为 1。

为了获得累积发生次数,我们可以使用这个df.groupby('id').cumcount() + 1

专注于id = B我们看到第二次出现B2个月后所以cum_count = 2。下一次出现的B is at 01-09-17,回顾 4 个月,我们只发现另外一件事,所以cum_count = 2, etc.


我的方法是调用辅助函数df.groupby('id').transform。我觉得这比它可能的更复杂、更慢,但它似乎有效。

# test data

    date    id  cum_count_desired
2017-03-01  A   1
2017-03-01  B   1
2017-03-01  C   1
2017-05-01  B   2
2017-05-01  D   1
2017-07-01  A   2
2017-07-01  D   2
2017-08-01  C   1
2017-09-01  B   2
2017-09-01  B   3

# preprocessing

df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
# Encode the ID strings to numbers to have a column
# to work with after grouping by ID
df['id_code'] = pd.factorize(df['id'])[0]

# solution

def cumcounter(x):
    y = [x.loc[d - pd.DateOffset(months=4):d].count() for d in x.index]
    gr = x.groupby('date')
    adjust = gr.rank(method='first') - gr.size() 
    y += adjust
    return y

df['cum_count'] = df.groupby('id')['id_code'].transform(cumcounter)

# output

df[['id', 'id_num', 'cum_count_desired', 'cum_count']]

           id  id_num  cum_count_desired  cum_count
date                                               
2017-03-01  A       0                  1          1
2017-03-01  B       1                  1          1
2017-03-01  C       2                  1          1
2017-05-01  B       1                  2          2
2017-05-01  D       3                  1          1
2017-07-01  A       0                  2          2
2017-07-01  D       3                  2          2
2017-08-01  C       2                  1          1
2017-09-01  B       1                  2          2
2017-09-01  B       1                  3          3

需要adjust

如果同一 ID 在同一天多次出现,我使用的切片方法将会对每个同一天的 ID 进行计数,因为当列表理解遇到日期时,基于日期的切片会立即获取所有同一天的值其上显示多个 ID。使固定:

  1. 按日期对当前 DataFrame 进行分组。
  2. 对每个日期组中的每一行进行排名。
  3. 从这些排名中减去每个日期组中的总行数。这会生成一个按日期索引的升序负整数系列,以 0 结尾。
  4. 将这些非正整数调整添加到y.

这仅影响给定测试数据中的一行——倒数第二行,因为B在同一天出现两次。

包括或排除时间间隔的左端点

计算行数旧于或更新于4 个日历月前,即include4 个月时间间隔的左端点,保留此行不变:

y = [x.loc[d - pd.DateOffset(months=4):d].count() for d in x.index]

计算行数严格比新4 个日历月前,即exclude4 个月时间间隔的左端点,请改用:

y = [d.loc[d - pd.DateOffset(months=4, days=-1):d].count() for d in x.index]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 Pandas 中的日期窗口计算值的累积出现次数 的相关文章

  • 如何在 Linux 中显示进程状态(阻塞、非阻塞)

    有没有办法查询 Linux 进程表中进程的状态 以便能够演示执行查询时进程是正在运行还是被阻止 我的目标是从进程或程序的 外部 执行此操作 因为我希望从操作系统进程的角度来理解这一点 但欢迎任何想法 这是Python代码阻塞的过程 impo
  • 如何在 pygame 中聚焦光线或如何仅绘制窗口的某些圆形部分?

    对于这一点 如果您熟悉它 请想想 超级马里奥制造2 中嘘关卡中的黑暗模式 我试图在角色周围创建一个圆形聚光灯 这也将使圆圈范围内的任何内容都可见 例如部分站在地板上 敌人或场景中的任何其他物体 我的计划是首先绘制圆圈 聚光灯 然后绘制场景
  • Pygame 玩家精灵没有出现

    我一直在为学校计算机课做这个项目 但无法让玩家精灵出现 有人可以帮忙吗 当我运行主游戏循环时 除了玩家精灵之外 所有内容都正确显示 它应该由于箭头输入而在屏幕上移动并受到重力的影响 当我删除图像并仅使用对象类和矩形时 该代码也有效 impo
  • SMTPAuthenticationError: (535, b'5.7.8 用户名和密码在 Django 生产中不被接受?

    我在 Heroku 上部署了一个 Django 应用程序 在其中一节中 我使用 SMTP Gmail 设置向用户发送电子邮件 当我在本地运行项目时 电子邮件发送成功 但在 Heroku 上部署的项目上却发送失败 我在 Stackoverfl
  • 将列表传递给 PyCrypto 中的 AES 密钥生成器

    我尝试使用 Pycrypto 生成 AES 密钥 但收到以下错误 类型错误 列表 不支持缓冲区接口 对于以下声明 aescipher AES new mykey AES MODE ECB mykey 属于类型list并包含 18854347
  • ValueError:在 R 中使用 keras 模型时在用户代码中

    我正在尝试使用 R 在 R 中运行一维 CNNkeras包裹 我正在使用以下代码 library MASS library keras Create some data data Boston data lt Boston create a
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • 在 Windows 上将 NumPy 与 BLAS 链接

    我正在尝试在 Windows 系统上安装 Theano 并且需要安装 BLAS 和 LAPACK 我的 System32 文件夹中有这些的 dll 文件 当我运行 numpy config来自 Anaconda 的 show 库的路径正确显
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 为图例中的点设置固定大小

    我正在制作一些散点图 我想将图例中的点的大小设置为固定的相等值 现在我有这个 import matplotlib pyplot as plt import numpy as np def rand data return np random
  • 在 Docker 容器内运行时,如何自动在 API 路由文件中进行 FASTAPI 拾取更改?

    我通过 docker 运行 FastApi 在 docker compose 中创建一个名为 ingestion data 的服务 我的 Dockerfile FROM tiangolo uvicorn gunicorn fastapi p
  • 为什么全新安装后会有pip和conda包?

    All Windows 10 64 位 d l Anaconda 2 5 0 与 Python3 64 位并安装 全新安装后我输入conda list 并且 在软件包中 我看到 重复像 jupyter 1 0 0 py35 1 jupyte
  • 监控单个文件

    我需要监控 使用watchdog http pythonhosted org watchdog index html 单个文件 而不是整个目录 避免监视整个目录的最佳方法是什么 我想this http pythonhosted org wa
  • import numpy 和 import numpy as np 之间的区别

    我明白 如果可能的话 应该使用 import numpy as np 这有助于避免由于命名空间引起的任何冲突 但我注意到虽然下面的命令有效 import numpy f2py as myf2py 以下不 import numpy as np
  • 在Python中引用不带换行符的长字符串

    我正在尝试在 Python 中编写一个长字符串 该字符串显示为 OptParser 选项的帮助项 在我的源代码 py 文件中 我想放置换行符 以便我的代码不会花费新行 但是 我不希望这些换行符影响代码运行时该字符串的显示方式 例如 我想写
  • 在 Django/python 中,如何将内存缓存设置为无限时间?

    cache set key value 9999999 但这并不是无限的时间 def get memcache timeout self timeout Memcached deals with long gt 30 days timeou
  • Tornado websocket handler , self.close() 正在关闭连接而不触发 on_close() 方法

    我是 python stackoverflow tornado 的新手 所以请耐心等待 纠正我 我正在使用龙卷风开发实时应用程序 当我在 Websocket 处理程序类中调用 self close 时 on close 方法不会启动 这次我
  • Beautiful Soup 获取动态表数据

    我有以下代码 url https www basketball reference com leagues NBA 2017 standings html all expanded standings html urlopen url so
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • Pandas 替换特定列上的值

    我知道这两个类似的问题 熊猫替换值 https stackoverflow com questions 27117773 pandas replace values Pandas 替换数据框中的列值 https stackoverflow

随机推荐

  • 更新到.net 4.0后wcf回调异常

    我有一个 wcf 服务 它使用 DualHttpBindings 的回调 该服务在找到搜索结果时将其数据表推送回客户端 对于长时间运行的搜索 这在 Net 3 5 中运行良好 自从我更新到 Net 4 0 后 它就抛出了 System Ru
  • 在一个组件视图中完成的更改不会反映在角度 4 中的另一组件视图中

    在这里 我正在更改一个组件中的一些数据 例如 更改一个模块的用户个人资料图片 并且相同的个人资料图片应该反映在其他模块的另一个组件中 这些不是父 子组件 因此我正在导入模块和特定组件 调用组件的函数来分配个人资料图片的范围值 如果我在控制台
  • 与 Superagent 保持连接

    我正在运行一个 node js 服务器 A 它使用 superagent 向另一个服务器 B 发出 HTTP 请求 我调查了服务器 B 上的请求并看到了标头connection being close和 httpVersion 是1 1 v
  • CSS 文本对齐:居中;没有使事物居中

    我有以下 html div ul class links clearfix li class menu 685 menu site map first Site Map li li class menu 686 menu privacy p
  • 如何将 Microsoft Bing 地图导航功能集成到 iPhone 应用程序中?

    我研究过微软必应地图导航 有 iOS 支持和 sdk 可用 http www microsoft com maps developers mobile aspx http www microsoft com maps developers
  • 删除 Vim 中两个括号之间的所有内容,包括换行符

    假设我有以下 python 数组文字 def f arr 1 2 3 我想删除括号中的所有内容 使其变成这样 def f arr 我怎样才能用 vim 中的最少命令来做到这一点 这些是我的一些尝试 Using di 将删除文本 但不会删除空
  • 尝试使用 request.path 设置 Cloud Firestore 安全规则

    我正在努力理解一些 Firestore 安全概念 我想根据以下内容制定一条规则request path财产 我的规则是这样的 service cloud firestore match databases database document
  • 什么是关键路径? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 作为一名开发人员 我有时会在开发执行的背景下遇到 关键路径 这个术语 从维基百科 http en wikipedia org wiki
  • Java:对大型磁盘文件进行随机读取的最快方法

    我有一组相当大的数据 大约 800 MB 左右 这基本上是一些大型的预计算表 我需要将一些计算速度提高几个数量级 创建该文件需要几台多核计算机使用优化的几天才能生成 和多线程算法 我愿意really需要该文件 既然已经计算过一次 那么 80
  • 强制 mdx 查询返回列名

    从 powerpivot 连接到 SSAS 时 我遇到以下问题 如果由于某种原因 mdx 查询没有返回行 也不会返回列名 并且 powerpivot 会给出错误 在 SSMS 中执行此类查询时 如果 mdx 什么也不返回 则得到 0 行 如
  • Android Studio - 找不到 intellij-core.jar

    我使用的是android studio 3 1 4 错误 找不到 intellij core jar com android tools external com intellij intellij core 26 0 1 在以下位置进行了
  • 使用 AngleSharp linq 查询获取 Href 属性

    我想了解如何使用 Anglesharp 我根据示例编写了这段代码 https github com AngleSharp AngleSharp https github com AngleSharp AngleSharp Setup the
  • Android Studio 无需 sdkmanager 安装

    我一直在使用 macOS 10 15 3 在 Flutter 中进行编程 目标是 iOS 设备 今天我也尝试安装 Android Studio 以进行分支 安装没有错误 但是在Library Android sdk 没有tools子目录 这
  • 多流维基百科转储

    我下载了德语维基百科转储 dewiki 20151102 pages articles multistream xml 我的简短问题是 在这种情况下 多流 意味着什么 转储使用 bz2 进行压缩 bz2 支持并行版本 使其能够更快地压缩 解
  • C中的通用数据结构[重复]

    这个问题在这里已经有答案了 有没有办法在 C 中创建通用数据结构并根据存储的数据类型使用函数 该结构具有各种类型的数据 例如可以根据存储的数据进行打印 例如 假设我希望创建一个只存储 float 和 int 的二叉搜索树 自然的方法是创建一
  • Xcode 8 未找到代码签名

    升级到 Xcode 8 后 由于以下错误 我无法在设备上调试 App installation failed No code signature found 我的设置 观察以及到目前为止我所尝试的 该设备已安装 iOS 10 Xcode 7
  • 用于检查表中相同的列值对的 SQL 查询是什么?

    我有一个表 emp id name salary 并且没有主键 我知道这是一个坏主意 但我的工作是在不一致的表上 我想要一个查询来检索具有相同值对 id name 的元组 我尝试使用自连接但没有得到确切的声明 这里正在考虑同一对 但我正在研
  • 访问 *ngFor 中项目的索引

    我的 html 页面中有一个循环 代码是 li style display inline div class col lg 3 col md 4 col xs 6 thumb a class thumbnail img a div li 在
  • Pyenv:重建 python 后如何“重建”virtualenvs

    我重建了 python 3 7 以使 pyinstaller 在 Mac 上工作 它似乎使用 3 7 0 删除了我所有的 virtualenv python 版本文件仍然存在 它们指向我期望的位置 但是当我运行 pyenv virtuale
  • 根据 Pandas 中的日期窗口计算值的累积出现次数

    我有一个DataFrame df 看起来像下面这样 dd mm yy id 01 03 17 A 01 03 17 B 01 03 17 C 01 05 17 B 01 05 17 D 01 07 17 A 01 07 17 D 01 08