自更改以来的时间的高效 pandas/numpy 函数

2023-12-03

Given a Series,我想有效地计算自发生更改以来已经通过了多少个观察值。这是一个简单的例子:

ser = pd.Series([1.2,1.2,1.2,1.2,2,2,2,4,3])

print(ser)

0    1.2
1    1.2
2    1.2
3    1.2
4    2.0
5    2.0
6    2.0
7    4.0
8    3.0

我想应用一个函数ser这将导致:

0    0
1    1
2    2
3    3
4    0
5    1
6    2
7    0
8    0

当我处理大型系列时,我更喜欢不涉及循环的快速解决方案。谢谢

Edit如果可能的话,希望该函数也适用于具有相同值的系列(这只会导致一系列整数加 1)


这是一种 NumPy 方法 -

def array_cumcount(a):
    idx = np.flatnonzero(a[1:] != a[:-1])+1
    shift_arr = np.ones(a.size,dtype=int)
    shift_arr[0] = 0

    if len(idx)>=1:
        shift_arr[idx[0]] = -idx[0]+1
        shift_arr[idx[1:]] = -idx[1:] + idx[:-1] + 1
    return shift_arr.cumsum()

样本运行 -

In [583]: ser = pd.Series([1.2,1.2,1.2,1.2,2,2,2,4,3,3,3,3])

In [584]: array_cumcount(ser.values)
Out[584]: array([0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 3])

运行时测试 -

In [601]: ser = pd.Series(np.random.randint(0,3,(10000)))

# @Psidom's soln
In [602]: %timeit ser.groupby(ser).cumcount()
1000 loops, best of 3: 729 µs per loop

In [603]: %timeit array_cumcount(ser.values)
10000 loops, best of 3: 85.3 µs per loop

In [604]: ser = pd.Series(np.random.randint(0,3,(1000000)))

# @Psidom's soln
In [605]: %timeit ser.groupby(ser).cumcount()
10 loops, best of 3: 30.1 ms per loop

In [606]: %timeit array_cumcount(ser.values)
100 loops, best of 3: 11.7 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自更改以来的时间的高效 pandas/numpy 函数 的相关文章

随机推荐

  • 如何在 Firefox 中启用 ActiveX 控件?

    我有一个使用 ActiveX 控件的应用程序 我想使用 Selenium IDE 自动执行此操作 但是当我启动应用程序时 我最终收到一条错误消息 打开 ActiveX 控件 有什么办法可以在 FireFox 中启用 ActiveX 吗 注意
  • 在图中寻找桥梁 C++ (BOOST)?

    我正在阅读 BOOST 库 注意到他们没有一种算法可以在图中找到桥梁 但他们确实有一个可以找到连接点的算法 无论如何 这可以有效地完成吗 我有个主意 1 使用 BOOST 寻找关节点 2 使用out edges 找到连接每个关节点的所有边
  • Stripe 禁用按比例分配

    我的 Stripe 订阅中有两个计划 第一个计划是每月 10 欧元的计划 直到特定日期为止 例如它于 2021 年 10 月 2 日开始 我希望它于 2021 年 7 月 15 日结束 我希望订阅者每月始终支付 10 欧元 即使是最后一个月
  • 如何在默认打印机上打印测试页?

    如何在默认打印机上打印测试页 使用 C Winform 代码 提前致谢 要生成内置 Windows 测试页 您还可以对 PrintUI dll 使用 p invoke 这是一个简单的类 可以让您执行此操作 public static cla
  • 使用命令行克隆 git 存储库成功,但使用 git GUI 客户端(例如 SourceTree)克隆失败

    我已经设置了一个gitMac OS X 10 7 系统上的用户 在 git 用户 root 中 我创建了一个repositories文件夹并初始化了一个名为的裸 git 存储库test 到目前为止 一切都很好 现在 我从与 Mac 位于同一
  • 如何停止在 Spring 中覆盖 bean

    我注意到 如果您在两个 xml 文件中定义具有相同 id 的 bean 它将在第二个文件中被覆盖 Say in file a xml i have
  • 何时在 Activity 中调用 findViewById

    我遇到以下问题 我有以下几行代码 Spinner domainSpinner Spinner findViewById R id domain domainSpinner setVisibility View VISIBLE 这些在用户单击
  • 如何将图标添加到WPF应用程序桌面快捷方式?

    请注意 我问的是桌面图标 而不是窗口图标 该图标显示在应用程序窗口上 这可以 但是当我运行安装程序来安装应用程序时 桌面快捷方式只有一个默认图标 如何将桌面图标与同一应用程序图标关联 当应用程序运行时 任务栏上的图标是正确的图标 我还将 i
  • PowerShell DSC 复合资源

    我已成功创建 DSC 配置并将其部署到服务器上 下一步 我尝试将服务器中常见的配置块部分分解为可重用的部分 或者用 DSC 的说法是 复合资源 经过大量研究后 我仍然无法使用复合资源 运行 Get DSCResource 时它们没有列出 查
  • Django-south 未检测到数据库更改

    我已经从 svn 更新了我们的项目 并且有了新的迁移文件 当我使用时 work manage py schemamigration mypackage auto 我有这样的消息 Nothing seems to have changed 但
  • 返回字段长度/大小的投影选项

    我只是想写一个像 SQL 一样的 mongo 查询 SELECT LENGTH binaryBody AS bodyLength FROM documents 为此 我想我必须使用 find 方法的投影 db documents find
  • 使用 XSL-FO 和 HTML?

    我正在尝试使用 XSLT 将一些 XML 数据转换为 HTML 以完成我的学士论文 我的教授希望我也考虑 XSL FO 或者至少写一些关于它的文字 但我对此很菜鸟 所以我的问题是 我可以将 FO 与 HTML 结合起来吗 我可以使用 FOR
  • WordPress - 按日期范围获取帖子

    我正在尝试获取过去 7 30 和 365 天 WordPress 的帖子列表 这是我使用的代码 args array posts per page gt 10 post status gt publish post type gt post
  • 在 ASP.NET MVC 中强制区分大小写的路由

    这个问题是以类似但不完全相同的方式提出的 并且没有得到令我满意的解决 之前 on 堆栈溢出 and 别处 来自 Linux 世界 我想使用 ASP NET MVC 但避免使用相同但大小写不同的路由解析到同一页面 我愿意not想要强制所有路由
  • 如何在 Qt Creator 中添加可调整大小的小部件?

    如何在 Qt Creator 中添加可调整大小的小部件 特别是小部件QVBoxLayout or QHBoxLayout Example int main int argc char argv QApplication app argc a
  • CS50 Pset 7 13.sql,我无法解决,嵌套sqlite3数据库

    数据库 movie db tables 导演 movie id person id 电影 id 标题 年份 人 身份证 姓名 出生 评分 movie id 评分 投票 明星 movie id person id 你可以下载database
  • 这个应用程序是在ios 5.0下开发的,运行良好,但在ios 4.3下崩溃

    我在iOS 5 0下开发了一个iPhone应用程序 并且运行良好 但是当涉及到 iOS 4 3 Base SDK 最新的 iOS 5 0 编译器 Apple LLVM 3 0 部署目标 iOS 4 3 时 启动后就会崩溃 崩溃点周围的输出如
  • 如何使用 NSDateFormatter 的 isLenient 选项?

    我似乎无法在 StackOverflow 或网络上的其他地方找到有关此标志的任何信息 苹果自己的文档只说 如果格式化程序设置为宽松 则在解析字符串时 它会使用启发式方法来猜测预期的日期 与任何猜测一样 它可能会得到错误的结果日期 即 与预期
  • JSF 中的本地化,如何记住每个会话而不是每个请求/视图选择的区域设置

    faces config xml
  • 自更改以来的时间的高效 pandas/numpy 函数

    Given a Series 我想有效地计算自发生更改以来已经通过了多少个观察值 这是一个简单的例子 ser pd Series 1 2 1 2 1 2 1 2 2 2 2 4 3 print ser 0 1 2 1 1 2 2 1 2 3