通过递增/递减最后找到的值向前/向后填充 na?

2023-12-02

给定以下 pandas 数据框(可以找到它的副本here)。如何在单独的列中填充 na 并递增/递减 nr 行,直到下一个信号值和前向/后向信号值? 信号值只有:1; -1 或 np.na

+----+---------+--------+
|    | Values  | Signal |
+----+---------+--------+
|  0 | 1420.49 |        |
|  1 | 1421.12 |        |
|  2 | 1418.95 |        |
|  3 | 1419.04 |      1 |
|  4 | 1419.04 |        |
|  5 | 1417.51 |        |
|  6 | 1416.97 |        |
|  7 | 1413.21 |     -1 |
|  8 | 1411.49 |        |
|  9 | 1412.57 |        |
| 10 | 1408.55 |      1 |
| 11 | 1409.16 |        |
| 12 | 1413.38 |        |
| 13 | 1413.38 |      1 |
| 14 | 1402.35 |        |
| 15 |  1397.8 |        |
| 16 | 1398.36 |        |
| 17 | 1397.62 |        |
| 18 | 1394.58 |     -1 |
| 19 | 1399.05 |        |
| 20 |  1399.9 |        |
| 21 | 1398.96 |     -1 |
| 22 | 1398.96 |        |
| 23 | 1393.69 |        |
| 24 | 1398.13 |        |
| 25 | 1398.66 |        |
| 26 | 1398.02 |      1 |
| 27 | 1397.97 |        |
| 28 | 1396.05 |        |
| 29 | 1398.13 |        |
+----+---------+--------+

最后的结果应该是这样的(here是它的副本):

+----+---------+--------+------------------------+----------------------+-----------------+
|    | Values  | Signal | forward signal rows nr | backward signal rows | value at signal |
+----+---------+--------+------------------------+----------------------+-----------------+
|  0 | 1420.49 |        |                        |                      |                 |
|  1 | 1421.12 |        |                        |                      |                 |
|  2 | 1418.95 |        |                        |                      |                 |
|  3 | 1419.04 |      1 |                      1 |                    4 |         1416.97 |
|  4 | 1419.04 |        |                      2 |                    3 |         1416.97 |
|  5 | 1417.51 |        |                      3 |                    2 |         1416.97 |
|  6 | 1416.97 |        |                      4 |                    1 |         1416.97 |
|  7 | 1413.21 |     -1 |                     -1 |                   -3 |         1412.57 |
|  8 | 1411.49 |        |                     -2 |                   -2 |         1412.57 |
|  9 | 1412.57 |        |                     -3 |                   -1 |         1412.57 |
| 10 | 1408.55 |      1 |                      1 |                    3 |         1413.38 |
| 11 | 1409.16 |        |                      2 |                    2 |         1413.38 |
| 12 | 1413.38 |        |                      3 |                    1 |         1413.38 |
| 13 | 1413.38 |      1 |                      1 |                    5 |         1397.62 |
| 14 | 1402.35 |        |                      2 |                    4 |         1397.62 |
| 15 |  1397.8 |        |                      3 |                    3 |         1397.62 |
| 16 | 1398.36 |        |                      4 |                    2 |         1397.62 |
| 17 | 1397.62 |        |                      5 |                    1 |         1397.62 |
| 18 | 1394.58 |     -1 |                     -1 |                   -3 |          1399.9 |
| 19 | 1399.05 |        |                     -2 |                   -2 |          1399.9 |
| 20 |  1399.9 |        |                     -3 |                   -1 |          1399.9 |
| 21 | 1398.96 |     -1 |                     -1 |                   -5 |         1398.66 |
| 22 | 1398.96 |        |                     -2 |                   -4 |         1398.66 |
| 23 | 1393.69 |        |                     -3 |                   -3 |         1398.66 |
| 24 | 1398.13 |        |                     -4 |                   -2 |         1398.66 |
| 25 | 1398.66 |        |                     -5 |                   -1 |         1398.66 |
| 26 | 1398.02 |      1 |                      1 |                    4 |         1398.13 |
| 27 | 1397.97 |        |                      2 |                    3 |         1398.13 |
| 28 | 1396.05 |        |                      3 |                    2 |         1398.13 |
| 29 | 1398.13 |        |                      4 |                    1 |         1398.13 |
+----+---------+--------+------------------------+----------------------+-----------------+

我通过一些嵌套循环获得了最终结果,但问题是它们在几百万行的较大数据帧上效率非常低。


基于信号的分组的常用方法(恕我直言,我们确实应该有更好的本机支持)使用比较累积和分组模式。这里的比较是为了判断一个信号条目是否为空,然后我们进行累加和,以便每个信号组都有自己的id(组id,或gid)。剩下的只是算术。

虽然这里有一些重复,我们可以重构掉,但我感觉很懒,所以:

gid = df["Signal"].notnull().cumsum()
dg = df.groupby(gid)
sign = dg["Signal"].transform("first")
df["forward signal rows"] = (dg.cumcount() + 1) * sign
df["backward signal rows"] = (dg["Signal"].transform("size") - dg.cumcount()) * sign
df["value at signal"] = dg["Values"].transform("last")
df.loc[gid == 0, "value at signal"] = np.nan

给我一个与您的目标相匹配的框架。

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

通过递增/递减最后找到的值向前/向后填充 na? 的相关文章

随机推荐

  • 使用 meshgrid 将 X,Y,Z 三元组转换为三个二维数组,用于 matplotlib 中的曲面图

    我是 Python 新手 所以请耐心等待 我很感激任何帮助 我拥有的 三个一维列表 xr yr zr 一个包含 x 值 另外两个包含 y 和 z 值 我想做的事 在 matplotlib 中创建 3D 等高线图 我意识到我需要使用以下方法将
  • 使用 ClickOnce 应用程序部署 COM 组件

    我们正在开发一个需要屏幕 录制 的 C WPF Net 4 0 应用程序 我们评估了 ByteScout屏幕截图SDK 提供免费试用 它完全满足我们的需要 然而 问题是我们的应用程序设计为由 ClickOnce 部署到我们客户的计算机 不在
  • 将 JSON 日期发送到 WCF 服务

    我想将 json 对象发布到我的 WCF 服务 我唯一的问题是他的日期属性 我从 jquery datepicker 获取日期 我想将其作为 c datetime 获取到我的服务中 我的服务 namespace Employee Servi
  • 如何向 TextChoices 添加额外数据?

    我如何添加额外的数据django db models TextChoices class Fruit models TextChoices APPLE myvalue True mylabel 这样 gt gt gt Fruit APPLE
  • YouTube 数据 API v3、Web 应用程序、403 使用限制访问未配置

    我在尝试访问 YouTube Data API v3 时遇到问题 这是每当我发送有效请求时收到的 json 响应 error errors domain usageLimits reason accessNotConfigured mess
  • 在列表中添加奇数

    我试图找到给定范围内所有奇数的总和 但我不知道如何指定哪些数字是奇数 我的教授说使用 for num in Numbers 来访问范围内的元素 这是我到目前为止所拥有的 numbers range 0 10 def addOddNumber
  • Mozilla WebApp Manifest 要求提供 HTTP 标头

    我已经搜索了几个小时 但找不到解决方案 目前我想将第一个 Web 应用程序上传到 Mozillas 新平台 第二步是添加清单文件 我从以下位置获取信息here并尝试使用名称manifest webapp构建清单但结果是以下消息 Your m
  • Flutter IOS FCM 推送通知未进入通知栏

    我是 Flutter 和 IOS 的新手 我正在为 Android 和 IOS 配置 FCM 推送通知 对于 android 它工作正常 我已经通过引用此链接完成了https medium com jun chenying flutter
  • 为什么缺少/未声明 MonitorFromWindow? (C++/WINAPI)

    我正在尝试 Windows API 但遇到了很多问题 最近的是这样的 我包含了 Windows h 并暂时包含了 Winuser h 但缺少 MonitorFromWindow 以及相关字段 如 MONITOR DEFAULTTONEARE
  • 将二进制数据转换为可打印的十六进制数据

    In this有人评论说以下代码只能在 玩具 项目中使用 不幸的是 他没有回来说明为什么它不符合生产质量 所以我希望社区中的某个人能够向我保证代码没问题 因为我非常喜欢它 或找出问题所在 template lt class T1 class
  • meshgrid 和 ndgrid 之间的实际区别?

    这个讨论越来越激烈here关于 pageIdx 与ndgrid 我现在能明白了meshgrid但不是ndgrid 请用实际例子详细说明可以使用的地方 它实际上不一样meshgrid 值中有一些奇怪的反转 那么它应该用在哪里 假设您想知道数组
  • 在 Chrome Devtools 中看不到本地存储键值对

    我有一个 json 文件 用于存储使用 javascript 在我的页面上显示的数据 此 json 文件及其键值对在 Chrome 的开发工具中不可见或不可访问 该组件管理 json 文件 Takes a filename and a JS
  • 使用 Jquery Mobile 进行 XML 解析

    我有以下格式的 XML 我想提取 标题 和 子菜单 标签 并从中创建一个菜单栏结构 如下图所示
  • 如何处理龙卷风中的帕尔斯指令?

    我是龙卷风框架的新手 当我打开网址时torchado web RequestHandler 需要处理 parms 的字典 请看下面的代码 class MainHandler tornado web RequestHandler def ge
  • 使用 log4j2 的多个线程的不同日志文件

    我正在运行一个 Java 应用程序 其中调用多个线程 每个线程都有一些唯一的名称 现在我想为每个日志文件创建多个日志文件 日志文件的名称应该与线程名称相同 使用 log4j2 可以吗 请帮我写log4j2配置文件 先感谢您 我同意 Rout
  • 用户提交的 HTML 带来的安全风险

    我正在使用 contentEditable div 它允许用户编辑正文 HTML 然后使用 AJAX 请求将其直接发布到网站 当然 我还要对其进行一些安全检查 最明显的是通过搜索确保没有提交任何脚本标签
  • 如何修复 Eclipse/Android 安装?图形 XML 编辑器中的 PNG 加载问题

    很长一段时间以来 我的带有 Android 插件的 Eclipse 环境都运行顺利 在软件更新过程中应用的更新的某个地方 它崩溃了 开始发生的第一个问题是在运行布局文件的 Android 插件图形编辑器时丢失 按钮 Form Widget
  • 如何访问 R 中的嵌套 SQL 表?

    来自 R Studio 的ODBC 数据库文档我可以看到一个如何将 SQL 表读入 R 数据框的简单示例 data lt dbReadTable con flights 让我粘贴一个图形BGBUreftable 我正在尝试读取 R 数据帧
  • 将ScheduledJob注册为系统帐户(无需传入凭据)

    我相信对于Register ScheduledTask你可以指定 User System 或者做类似的事情 principal New ScheduledTaskPrincipal UserId SYSTEM LogonType Servi
  • 通过递增/递减最后找到的值向前/向后填充 na?

    给定以下 pandas 数据框 可以找到它的副本here 如何在单独的列中填充 na 并递增 递减 nr 行 直到下一个信号值和前向 后向信号值 信号值只有 1 1 或 np na Values Signal 0 1420 49 1 142