Python 在定义的时间内,在序列中查找条目出现频率最高的范围(以大熊猫为单位)

Python 在定义的时间内,在序列中查找条目出现频率最高的范围(以大熊猫为单位),python,pandas,Python,Pandas,我在Pandas中有一个大型数据集,其中的条目用时间戳标记。我正在寻找一个解决方案,如何获得一个定义长度(如1分钟)的范围,其中条目的出现率最高 一种解决方案是将数据重新采样到更高的时间范围(例如一分钟),并将数据段与最大数量的值进行比较。但是,它只能找到与给定时间段的开始和结束时间相对应的范围 我宁愿找到一个解决方案,找到任何1分钟的范围,无论它们实际上从哪里开始 在下面的示例中,我将查找1分钟的“窗口”,其中条目出现率最高,从范围内的第一个信号开始,到范围内的最后一个信号结束: 8:50:0

我在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的范围


有什么提示吗?

您需要创建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)
对于此玩具数据集,窗口(即8:49:05,8:50:05,…)的5秒偏移量为1分钟窗口最大计数的第一个,有5个计数