【问题标题】:Finding a range in the series with the most frequent occurrence of the entries over a defined time (in Pandas)在定义的时间内查找条目出现频率最高的系列范围(在 Pandas 中)
【发布时间】:2018-02-05 03:33:39
【问题描述】:

我在 Pandas 中有一个大型数据集,其中的条目标有时间戳。我正在寻找一种解决方案,如何获得具有最高条目出现率的定义长度范围(如 1 分钟)。

一种解决方案可能是将数据重新采样到更高的时间范围(例如一分钟)并比较具有最多值的部分。但是,它只会找到与给定时间范围的开始和结束时间相对应的范围。

我宁愿找到一个解决方案来找到任何 1 分钟范围,无论它们实际从哪里开始。

在下面的示例中,我将寻找 1 分钟的“窗口”,其中条目出现次数最多,从范围内的第一个信号开始,以范围内的最后一个信号结束:

8:50:00
8:50:01
8:50:03
8:55:00
8:59:10
9:00:01
9:00:02
9:00:03
9:00:04
9:05:00

因此我想获得范围 8:59:10 - 9:00:04

任何提示如何做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你需要创建1分钟的窗口,滑动开始时间为1秒;计算任何窗口的最大出现次数。在 pandas 0.19.0 或更高版本中,您可以使用 base 作为参数重新采样时间序列,以在不同时间启动重新采样的窗口。

    我使用tempfile 将您的数据复制为下面的玩具数据集。

    import tempfile
    import pandas as pd
    
    tf = tempfile.TemporaryFile()
    tf.write(b'''8:50:00
    8:50:01
    8:50:03
    8:55:00
    8:59:10
    9:00:01
    9:00:02
    9:00:03
    9:00:04
    9:05:00''')
    tf.seek(0)
    
    df = pd.read_table(tf, header=None)
    df.columns = ['time']
    df.time = pd.to_datetime(df.time)
    
    max_vals = []
    for t in range(60):
        # .max().max() is not a mistake, use it to return just the value
        max_vals.append(
            (t, df.resample('60s', on='time', base=t).count().max().max())
        )
    
    max(max_vals, key=lambda x: x[-1])
    # returns:
    (5, 5)
    

    对于这个玩具数据集,窗口的 5 秒偏移量(即 8:49:05、8:50:05...)对于 1 分钟的窗口具有 5 个计数的最大计数中的第一个.

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 2018-04-13
      • 2019-02-01
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多