You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中高效统计2秒时间窗口内唯一TN值的方法

优化方案:矢量化分箱统计替代循环

你的循环方案在大数据量下效率极低,核心原因是每次循环都要重复切片DataFrame并计算去重,时间复杂度为O(m*n)(m为循环次数,n为数据量)。以下是两种高效的矢量化实现方法:

方法一:使用pandas cut 分箱 + 分组统计

利用pd.cut将时间值分配到对应的2秒窗口,再通过分组统计每个窗口的唯一TN数量:

import numpy as np
import pandas as pd

# 定义窗口边界:从5398(5400-2)开始,到86400结束,步长2
bins = np.arange(5400 - 2, 86400 + 1, 2)
# 为每条数据标记所属的2秒窗口(左闭右开,匹配你的原始逻辑)
rundf['window'] = pd.cut(rundf['time'], bins=bins, right=False)
# 分组统计每个窗口的唯一TN数量
uniqueTN_counts = rundf.groupby('window')['TN'].nunique()

# 如果需要和原始代码一样的列表格式(仅保留数量值)
uniqueTN = uniqueTN_counts.tolist()

方法二:使用numpy digitize 加速分箱

如果数据量特别大,np.digitize比pd.cut速度更快,原理是直接计算每个时间值对应的窗口索引:

import numpy as np
import pandas as pd

bins = np.arange(5398, 86401, 2)
# 获取每条数据所属的窗口索引(right=False对应左闭右开区间)
bin_indices = np.digitize(rundf['time'], bins, right=False)
# 按窗口索引分组统计唯一TN数量
uniqueTN_counts = rundf.groupby(bin_indices)['TN'].nunique()
uniqueTN = uniqueTN_counts.tolist()

关键优化点说明

  • 两种方法都是矢量化操作,仅需遍历数据1-2次,时间复杂度降至O(n),远优于循环的O(m*n)
  • 避免了循环中重复的DataFrame切片操作,减少了内存开销和计算冗余
  • 若你需要保留每个窗口的具体唯一TN值(而非数量),可将nunique()替换为unique(),但注意大数据下存储所有唯一值会占用较多内存

内容的提问来源于stack exchange,提问作者Jacob Shirley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:05:47