【问题标题】:Getting a count of missing timestamps in a dataset based on expected interval根据预期间隔获取数据集中缺失时间戳的计数
【发布时间】:2020-10-14 18:29:06
【问题描述】:

我有一个数据集,该数据集由应每 15 分钟记录并返回的压力时间戳读数组成。下面的示例数据表明数据集中存在大于 15 分钟的间隙

我一直在尝试找到一种方法来添加计数列,该列计算接收到的读数之间缺少多少读数,例如 15 分钟间隔 = 0(错过读数),半小时间隔 = 1(错过阅读)和 45 分钟的间隔 = 2,等等。

在这个阶段,我没有任何想要展示的代码,因为我还有很长的路要走,虽然我一直在解决这篇文章,但仍然没有成功。 How Can I Detect Gaps and Consecutive Periods In A Time Series In Pandas

任何指针将不胜感激

Place             date       pressure (m)
Somewhere   01/09/2019 00:00    34
Somewhere   01/09/2019 00:30    34
Somewhere   01/09/2019 00:45    34
Somewhere   01/09/2019 01:15    34
Somewhere   01/09/2019 01:30    34
Somewhere   01/09/2019 02:15    34
Somewhere   01/09/2019 02:30    34
Somewhere   01/09/2019 02:45    34
Somewhere   01/09/2019 03:15    34
Somewhere   01/09/2019 03:30    34
Somewhere   01/09/2019 03:45    34.5
Somewhere   01/09/2019 04:00    34
Somewhere   01/09/2019 04:15    34
Somewhere   01/09/2019 06:45    33.5
Somewhere   01/09/2019 07:00    33.5
Somewhere   01/09/2019 07:30    34

【问题讨论】:

    标签: python pandas dataframe time-series gaps-in-data


    【解决方案1】:

    使用pd.to_datetimedate列转换为pandas日期时间序列,然后使用Series.diff计算日期之间的连续差异,然后将这个差异除以pd.Timedelta,间隔为15min,最后使用.fillna0 填充NaN 值:

    df['date'] = pd.to_datetime(df['date'])
    df['gap'] = (df['date'].diff() / pd.Timedelta(minutes=15)).sub(1).fillna(0)
    

    结果:

    # print(df)
    
            Place                date  pressure (m)  gap
    0   Somewhere 2019-01-09 00:00:00          34.0  0.0
    1   Somewhere 2019-01-09 00:30:00          34.0  1.0
    2   Somewhere 2019-01-09 00:45:00          34.0  0.0
    3   Somewhere 2019-01-09 01:15:00          34.0  1.0
    4   Somewhere 2019-01-09 01:30:00          34.0  0.0
    5   Somewhere 2019-01-09 02:15:00          34.0  2.0
    6   Somewhere 2019-01-09 02:30:00          34.0  0.0
    7   Somewhere 2019-01-09 02:45:00          34.0  0.0
    8   Somewhere 2019-01-09 03:15:00          34.0  1.0
    9   Somewhere 2019-01-09 03:30:00          34.0  0.0
    10  Somewhere 2019-01-09 03:45:00          34.5  0.0
    11  Somewhere 2019-01-09 04:00:00          34.0  0.0
    12  Somewhere 2019-01-09 04:15:00          34.0  0.0
    13  Somewhere 2019-01-09 06:45:00          33.5  9.0
    14  Somewhere 2019-01-09 07:00:00          33.5  0.0
    15  Somewhere 2019-01-09 07:30:00          34.0  1.0
    

    【讨论】:

    • 感谢您提供此 Shubham。它完美地完成了这项工作。我能问一下 .sub(1) 是做什么的吗?那是看上一行吗?
    • .sub(1) 从结果中减去1,例如(00:30::00 - 00:00:00) / 00:15:00 = 2,所以我们减去1 来调整差距。
    猜你喜欢
    • 2019-07-05
    • 2020-03-07
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多