Pandas diff SeriesGroupBy 比较慢

2023-12-31

Total time: 1.01876 s
Function: prepare at line 91

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    91                                           @profile
    92                                           def prepare():
    93                                           
    94         1       5681.0   5681.0      0.6     
    95         1       2416.0   2416.0      0.2      
    96                                           
    97                                               
    98         1        536.0    536.0      0.1      tss = df.groupby('user_id').timestamp
    99         1     949643.0 949643.0     93.2      delta = tss.diff()
   100         1       1822.0   1822.0      0.2      
   101         1      13030.0  13030.0      1.3      
   102         1       5193.0   5193.0      0.5      
   103         1       1251.0   1251.0      0.1      
   104                                           
   105         1       2038.0   2038.0      0.2      
   106                                           
   107         1       1851.0   1851.0      0.2     
   108                                           
   109         1        282.0    282.0      0.0      
   110                                           
   111         1       3088.0   3088.0      0.3      
   112         1       2943.0   2943.0      0.3      
   113         1        438.0    438.0      0.0      
   114         1       4658.0   4658.0      0.5      
   115         1      17083.0  17083.0      1.7      
   116         1       3115.0   3115.0      0.3      
   117         1       3691.0   3691.0      0.4      
   118                                           
   119         1          2.0      2.0      0.0      

我有一个数据框,我按某个键进行分组,然后从每个组中选择一列,并对该列(每组)执行 diff。如分析结果所示,与其他操作相比,diff 操作非常慢,并且是一种瓶颈。这是预期的吗?是否有更快的替代方案可以达到相同的结果?

编辑:更多解释在我的用例中,时间戳代表用户某些操作的时间,我想计算这些操作之间的增量(它们已排序),但每个用户的操作完全独立于其他用户。

编辑:示例代码

import pandas as pd
import numpy as np


df = pd.DataFrame(
    {'ts':[1,2,3,4,60,61,62,63,64,150,155,156,
           1,2,3,4,60,61,62,63,64,150,155,163,
           1,2,3,4,60,61,62,63,64,150,155,183],
    'id': [1,2,3,4,60,61,62,63,64,150,155,156,
           71,72,73,74,80,81,82,83,64,160,165,166,
           21,22,23,24,90,91,92,93,94,180,185,186],
    'other':['x','x','x','','x','x','','x','x','','x','',
             'y','y','y','','y','y','','y','y','','y','',
             'z','z','z','','z','z','','z','z','','z',''],
    'user':['x','x','x','x','x','x','x','x','z','x','x','y',
            'y','y','y','y','y','y','y','y','x','y','y','x',
            'z','z','z','z','z','z','z','z','y','z','z','z']
    })



df.set_index('id',inplace=True)
deltas=df.groupby('user').ts.transform(pd.Series.diff)

如果您不想对数据进行排序或下拉至numpy,那么通过改变你的user系列到分类。分类数据有效地存储为整数指针。

在下面的示例中,我看到从 86 毫秒改进到 59 毫秒。对于更大的数据集和更多用户重复的情况,这可能会进一步改进。

df = pd.concat([df]*10000)

%timeit df.groupby('user').ts.transform(pd.Series.diff)  # 86.1 ms per loop

%timeit df['user'].astype('category')                    # 23.4 ms per loop
df['user'] = df['user'].astype('category')
%timeit df.groupby('user').ts.transform(pd.Series.diff)  # 35.7 ms per loop

如果您正在执行多项操作,则转换为分类的一次性成本可以打折。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas diff SeriesGroupBy 比较慢 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 代码高尔夫:井字棋

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 按字符数发布您的最短代码 以检查玩家是否获胜 如果获胜 是哪一个 假设变量中有一个整数数组b
  • 重命名 ASP.NET Identity 表时出现重复的外键

    我遵循了以下建议这个问题 https stackoverflow com questions 19460386 how can i change the table names when using visual studio 2013 a
  • 参数包扩展的“模式”定义,尤其是在函数调用中

    据我了解 当包含参数包的模式右侧出现省略号 时 该模式将为包中的每个参数扩展一次 然而 尽管我能够找到模式及其扩展的孤立示例 但我无法找到模式构成的定义 据我所知 空格在模式的定义中不起任何作用 但括号却起作用 例如 在这个例子中 temp
  • 在 sbt 控制台上运行 Spark

    我是 Spark 新手 正在尝试在 sbt 控制台上运行它 我有一个合适的build sbt 因为代码在 Intellij 上运行良好 并且能够导入代码中的包 问题是 当在 sbt 控制台 终端 上运行时 执行器只是保持运行并且无法完成任务
  • android 阿拉伯语十进制格式,符号位于数字右侧

    我正在尝试支持左语言的 RTL 并且正在使用阿拉伯语进行测试 我对此一无所知 负号 正号应该位于数字的右侧还是左侧 我认为它应该在左侧 但是当我使用 Android 的 DecimalFormat 将数字放入设备设置的区域设置时 该符号出现
  • 候选者的 UITableView 类型不匹配?

    Xcode 说 候选者的 UITableView 类型不匹配 有人知道如何解决这个问题吗 func tableView tableView UITableView numberOfRowsInSection section Int gt I
  • C++ 11 代码可以使用 `clang++` 进行编译,但不能使用 `clang -x c++` 进行编译

    基本问题 我有以下代码 include
  • Android SQLite删除行问题

    我正在尝试从表中删除一行 但我有三个 WHERE 子句 并且不确定我是否使用了正确的语句 db delete DBAdapter TableName Id Id AND WHERE QstnrId Integer parseInt Ques
  • 使用 github 操作创建拉取请求

    我试图让它发挥作用 但我也很困惑 在触发彼得埃文斯公关之前 它之间缺少什么 这个场景非常简单 我喜欢在任何 feature 分支上推送 自动创建 PR 但相反 我遇到了奇怪的场景 其中开发更改应用于 feature 分支之上 有人可以给我提
  • 为什么使用 webflux 进行 Spring Boot 测试会忽略自定义 Jackson 模块

    我正在使用 Spring Boot 2 0 1 和 WebFlux 路由器功能编写一个应用程序 not基于注释 对于我的一些数据对象 我编写了扩展的自定义序列化器StdSerializer 这些我注册在SimpleModule并将该模块公开
  • 隐藏溢出时检测用户滚动尝试

    scroll 当内容为overflow hidden wheel 滚轮鼠标会触发 但鼠标不会触发魔术触控板 http www apple com shop product MC380LL A magic trackpad or 魔术鼠标 h
  • SQL - 检查列是否自动递增

    我正在尝试运行查询来检查列是否自动递增 我可以检查类型 默认值 是否可为空等 但我不知道如何测试它是否自动递增 这是我测试其他事情的方法 SELECT FROM INFORMATION SCHEMA COLUMNS WHERE TABLE
  • InfluxDB - 仅获取查询中的最后一个值

    是否可以只查询查询结果的最后一个值 或第n个值 例如 在查询中 SELECT value FROM response times WHERE time gt now 1h limit 1000 是否有可能只获取最后一个值 即时间上更早的值
  • Django 管理表单 - 如何动态更改选择选项?

    我有 2 个型号 class City models Model name models CharField max length 50 slug models SlugField max length 50 class CityNews
  • 批处理文件中括号内的转义括号

    这就是我正在尝试做的 echo This is some code that is echo Important to echo exactly as is echo Even if I use parenthesis echo for s
  • CesiumViewer 中的响应式 DIV [CesiumJS]

    我正在定制一个 Cesium 地图 它有一个覆盖层 里面有各种信息 我用 bootsrap 实现的覆盖层的样式 不幸的是我放置的 div 保留在特定位置并忽略页面大小的调整 有没有办法让添加到铯查看器的 DIV 响应 我现在做的是 var
  • 为什么我的代码没有在我的应用程序上更新? (更新eclipse后)

    在你因为看不到任何代码而否决我的问题 否决的荒谬理由 之前 请阅读它 问题 问题是 即使我更改代码并在手机上运行它 它也会运行 但应用程序实际上不会改变 例如 如果我以前吃吐司会说 hello world 在 onCreate 中 但后来我
  • 什么是 Webhook?我为什么要关心?

    我能找到的最好的是这个维基条目 http en wikipedia org wiki Webhook 我想 肯定还有比这更多的事情 我错过了什么吗 来自doc https webhooks pbworks com w page 133851
  • 如何获得所有可能的 3 个字母排列? [复制]

    这个问题在这里已经有答案了 可能的重复 列出字符串 整数的所有排列 https stackoverflow com questions 756055 listing all permutations of a string integer
  • Pandas diff SeriesGroupBy 比较慢

    Total time 1 01876 s Function prepare at line 91 Line Hits Time Per Hit Time Line Contents 91 profile 92 def prepare 93