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