描述时间序列 pandas 中的间隙

2024-04-11

我正在尝试编写一个函数,该函数采用连续的时间序列并返回一个数据结构,该数据结构描述数据中任何缺失的间隙(例如带有“开始”和“结束”列的 DF)。对于时间序列来说,这似乎是一个相当常见的问题,但是尽管使用了 groupby、diff 等,并进行了探索,但我还没有能够想出比下面更好的方法。

对我来说,优先考虑的是使用矢量化操作来保持效率。必须有一个使用矢量化操作的更明显的解决方案——不是吗?感谢各位的帮助。

import pandas as pd


def get_gaps(series):
    """
    @param series: a continuous time series of data with the index's freq set
    @return: a series where the index is the start of gaps, and the values are
         the ends
    """
    missing = series.isnull()
    different_from_last = missing.diff()

    # any row not missing while the last was is a gap end        
    gap_ends = series[~missing & different_from_last].index

    # count the start as different from the last
    different_from_last[0] = True

    # any row missing while the last wasn't is a gap start
    gap_starts = series[missing & different_from_last].index        

    # check and remedy if series ends with missing data
    if len(gap_starts) > len(gap_ends):
         gap_ends = gap_ends.append(series.index[-1:] + series.index.freq)

    return pd.Series(index=gap_starts, data=gap_ends)

根据记录,Pandas==0.13.1,Numpy==1.8.1,Python 2.7


这个问题可以转化为查找列表中的连续数字。找到该系列中所有为空的索引,如果(3,4,5,6)的运行都为空,则只需提取开始和结束(3,6)

import numpy as np
import pandas as pd
from operator import itemgetter
from itertools import groupby


# create an example 
data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
s = pd.series( data, index=data)
s = s.reindex(xrange(18))
print find_gap(s)  


def find_gap(s): 
    """ just treat it as a list
    """ 
    nullindex = np.where( s.isnull())[0]
    ranges = []
    for k, g in groupby(enumerate(nullindex), lambda (i,x):i-x):
        group = map(itemgetter(1), g)
        ranges.append((group[0], group[-1]))
    startgap, endgap = zip(* ranges) 
    return pd.series( endgap, index= startgap )

参考 :识别列表中的连续数字组 https://stackoverflow.com/questions/2154249/identify-groups-of-continuous-numbers-in-a-list

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

描述时间序列 pandas 中的间隙 的相关文章

随机推荐

  • 我什么时候需要基础活动和基础片段?

    在我看到的很多示例中 所有活动和片段都从基本活动和基本片段扩展而来 2个问题 我应该什么时候使用它 里面应该放什么样的代码 通常 当我需要在所有活动 片段的一些生命周期回调中做一些工作时 我会使用基本活动 片段 例如 如果您使用牛油刀 ht
  • 如何将子元素附加到 React 元素

    我想用循环将 child 附加到我的主 div let mainContainer React createElement div className contexCon 像这样 for let i 0 i lt 3 i mainConta
  • 如何在 Django 管理表单中添加自定义操作按钮并发布信息

    我是姜戈新手 我正在使用 Django 管理 我怎样才能制作一个新按钮 靠近保存 并发布信息并在 python 脚本中使用它 我正在使用 Django 版本 2 管理员 py admin site register Router admin
  • 找不到具有以下功能的代理:grunt

    当我尝试在本地 TFS 2015 Update 1 上对构建进行排队时 收到以下错误消息 找不到具有以下功能的代理 grunt 我已经安装了NodeJS and grunt cli他们在path 即它们可以从任何位置在 cmd 中执行 我缺
  • 无法调用未定义的方法“then”

    为什么我收到 无法调用未定义的方法 then http plnkr co edit yWS6hRjmZZeZMJyVA0zy p preview http plnkr co edit yWS6hRjmZZeZMJyVA0zy p previ
  • 如何禁用 d3 对数刻度中的小刻度?

    我的实时 d3 对数刻度图如下所示 我只想显示主要刻度及其标签 10 2 10 1 10 0 10 1 10 2 but 不是小蜱虫 我希望日志 Y 轴看起来像这样 没有小刻度 我怎样才能做到这一点 EDIT 发布一些代码 svg d3 s
  • ViewState 与 ASP.NET MVC 相关吗?

    我正在学习 ASP NET MVC ASP NET 的许多概念 如身份验证 授权 会话状态 仍然适用于它 但从我所了解的情况来看 我不认为 ViewState 在 ASP NET 应用程序中仍然相关 但它就在那里 System Web Mv
  • Codeigniter - cookie 在 Internet Explorer 8 中不起作用

    此代码适用于除 Internet Explorer 8 之外的所有浏览器 this gt input gt set cookie array name gt test cookie value gt hello from cookie ex
  • T-SQL 和 WHERE LIKE %Parameter% 子句

    我试图编写一个使用 WHERE LIKE text 子句的语句 但当我尝试使用文本参数时 我没有收到结果 例如 这有效 SELECT Employee WHERE LastName LIKE ning 这将返回用户 Flenning Man
  • Json.Encode 在 CS 文件中工作,但在 CSHTML 中不起作用

    在我的 CS 文件中 我正在执行以下命令 它按预期工作 using System Web Helpers String json System Web Helpers Json Encode null 但是 在我的 CSHTML 文件中 我
  • 使用 jQuery 重新绑定 DOM 事件

    这纯粹是一个理论问题 所以我不是在寻找替代解决方案 有没有办法让默认处理程序执行类似的操作 var defaultHandler test click test unbind click test bind click defaultHan
  • PDFBox 中的 load() 和 parse() 方法可能存在错误?

    我尝试使用PDFBox http pdfbox apache org 定期 pdf文件并且工作正常 但是当我遇到损坏的 pdf 代码会 冻结 不抛出错误或其他东西 简单地说load or parse函数需要永远执行 Here is 损坏的文
  • Qt LGPL 许可例外? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用Qt Mfc 迁移框架 http doc trolltech com solutions qtwinmigrate index
  • 通过 Jenkins 上的 Java Web Start 启动从属代理时出现问题

    我们最近将 Jenkins 升级到了最新版本 从那时起 我一直无法通过 Java Web Start 通过命令行启动从站 每次我尝试启动它时 都会收到 无法启动应用程序 错误 在详细信息面板中 CouldNotLoadArgumentExc
  • 没有可执行 jar 的 Spring Boot 2 Gradle 插件

    如何配置 Spring Boot Gradle 插件 2 以禁用 Gradle Script Kotlin 中的 Boot 分发 我想要的发行版是一个程序集捆绑包 zip 其中包含 lib 文件夹中的所有依赖项 和 jar 我已启用 Jar
  • Python 日志记录:为什么 __init__ 被调用两次?

    我正在尝试将 python 日志记录与配置文件和自己的处理程序一起使用 这在某种程度上是有效的 真正让我困惑的是 init 被叫两次并且 del 被调用一次 当我删除整个配置文件内容并直接在代码中创建处理程序时 init 被调用一次并且 d
  • mysql 小数和tinyint 乘法精度

    在 mysql 5 1 中 我有一个包含两列的表 create table t1 price decimal 6 2 quantity tinyint 4 在我正在做的选择查询中 select sum price quantity from
  • UglifyJS 属性修改

    根据文档 UglifyJS 可以修改除提供的保留列表中的属性名称之外的所有属性名称 是否可以用其他方式做到这一点 这样只有提供的列表上的属性才会被破坏 如果是这样 我需要传递哪些选项uglify minify files 实现您正在寻找的白
  • 批量格式化文件日期YYYYMMDD

    我一直在处理批处理文件中的一些代码 用于评估两个文件日期 如果一个日期大于另一个日期 则会运行另一个 bat 文件 我想要做的是将两个日期格式化为 YYYYMMDD 以便我可以使用GTR 比 更棒 代码如下 但如果我使用它就可以工作 equ
  • 描述时间序列 pandas 中的间隙

    我正在尝试编写一个函数 该函数采用连续的时间序列并返回一个数据结构 该数据结构描述数据中任何缺失的间隙 例如带有 开始 和 结束 列的 DF 对于时间序列来说 这似乎是一个相当常见的问题 但是尽管使用了 groupby diff 等 并进行