You need to enable JavaScript to run this app. Vega/Vega-Lite按日期分组后筛选每组第n条数据的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Vega/Vega-Lite按日期分组后筛选每组第n条数据的实现方法

Vega-Lite v4 按日期分组取每组第n条数据的通用实现方案

基础参考配置

以下为未添加分组筛选逻辑的基础散点图示例:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/seattle-temps.csv"},
  "mark": "point",
  "encoding": {
    "x": {"field": "date", "type": "temporal"},
    "y": {"field": "temp", "type": "quantitative"}
  }
}

核心实现逻辑

整套方案不依赖特定数据集结构,可完整保留筛选行的全部原始字段,实现流程分为三步:

  • 生成分组标识:根据需要的日期分组粒度(按天、按月、按季度等),通过原生转换算子生成统一的分组键,作为后续窗口计算的分组依据
  • 组内序号标记:通过窗口转换算子,以分组键为边界拆分数据组,按照指定排序规则给组内每一行生成连续行号
  • 目标行筛选:基于生成的组内行号,筛选出位次等于目标n值的行,全程不会修改、删除原始数据字段

可直接复用的通用配置

以下示例实现「按天分组,取每个分组内按时间升序排列的第2条数据」的效果,可根据实际需求调整参数:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/seattle-temps.csv"},
  "transform": [
    // 按天生成分组键,调整timeUnit参数即可修改分组粒度(按天/月/季度等)
    {"timeUnit": "yeardate", "field": "date", "as": "group_key"},
    // 窗口计算组内行号
    {
      "window": [
        {"op": "row_number", "as": "group_row_index"}
      ],
      "groupby": ["group_key"],
      "sort": [{"field": "date", "order": "ascending"}]
    },
    // 筛选每个分组的第n条数据,修改等号后的数值即可调整取数位次
    {"filter": "datum.group_row_index == 2"}
  ],
  "mark": "point",
  "encoding": {
    "x": {"field": "date", "type": "temporal"},
    "y": {"field": "temp", "type": "quantitative"}
  }
}

实现注意事项

  • 分组粒度可灵活调整:将timeUnit转换中的参数替换为yearmonth、yearquarter等内置时间粒度,即可适配不同维度的分组需求,无需修改后续转换逻辑
  • 组内排序必须明确:窗口计算的sort配置需指定稳定的排序规则,避免因数据加载顺序差异导致组内行号偏移,保证取数结果一致
  • 原始字段无损耗:所有转换步骤均为新增衍生字段的操作,筛选完成后自动清理衍生字段,最终保留的行数据完全包含原始数据集的全部字段,适配多字段的自有数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 07:06:06