如何查找大表中目标特征出现次数最高的前3组连续100行区间
实现思路:滑动窗口法(时间复杂度O(n),数千行规模秒出结果)
这个需求是典型的固定长度滑动窗口统计问题,不需要暴力遍历所有窗口重复计算,单次遍历即可完成所有区间的分值统计:
- 先定义目标特征集合,例如
target_features = {"dessert", "object"} - 生成和表格行数等长的分值数组,每一位对应行的得分:如果该行feature属于目标特征集合记1,否则记0(需要给不同特征设置不同权重的话可以自定义分值)
- 先计算初始窗口(行0到行99)的总得分,之后每次窗口向右滑动1行时,仅需要减去移出窗口的行分值、加上新进入窗口的行分值,即可快速得到当前窗口的总得分
- 最后把所有窗口的得分倒序排序,取前3即可
代码示例(基于pandas实现)
pandas已经内置了滑动窗口计算函数rolling,不需要手动实现滑动逻辑,代码更简洁:
import pandas as pd # 1. 读取你的表格数据,假设已经加载为df # df = pd.read_csv("你的表格路径.csv") # 2. 定义目标特征集合 target_features = {"dessert", "object"} # 3. 生成每行的匹配得分 df['score'] = df['feature'].apply(lambda x: 1 if x in target_features else 0) # 4. 计算长度为100的滑动窗口总得分 df['window_sum'] = df['score'].rolling(window=100).sum() # 5. 过滤有效窗口,绑定窗口的起止行号 valid_windows = df[df['window_sum'].notna()].reset_index() valid_windows['start_idx'] = valid_windows['index'] - 99 valid_windows['end_idx'] = valid_windows['index'] # 6. 按得分倒序取前3个窗口 top3_windows = valid_windows.sort_values(by='window_sum', ascending=False).head(3)[['start_idx', 'end_idx', 'window_sum']] # 输出结果 print(top3_windows)
补充说明
- 运行前可先判断表格总行数,如果小于100需要自行调整窗口长度,否则不会生成有效计算结果
- 如果要求窗口内必须覆盖所有指定的目标特征才计入统计,可以在过滤有效窗口的步骤增加对应判断逻辑,筛掉未覆盖全目标特征的窗口即可
- 数千行的规模下该方案计算耗时在毫秒级,完全不需要额外优化
内容的提问来源于stack exchange,提问作者h3209890
相关产品推荐
相关产品推荐

