python - 查找在指定时间内条目出现频率最高的系列范围(在 Pandas 中)

标签 python pandas

我在 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)

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

关于python - 查找在指定时间内条目出现频率最高的系列范围(在 Pandas 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909257/

相关文章:

python - Pandas:无法访问粗体列值

python - Pandas 按行读取数据

python - 列出 pandas dataframe 列中的所有单词

python - 将项目添加到列表的副本中出现意外行为

python - “元组”不可调用错误

python - Pandas mul 密集与稀疏

python - pandas:将日期时间转换为月末

python - 通过沿一个轴堆叠将两个 numpy View 合并为一个 View

python - 实例化模拟对象时,模拟属性返回值被覆盖

python - django Rest框架使用ArrayAgg和GROUP BY进行注释