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

如何按条件聚合表格,为同Key下连续Y的行分配自增分组序号

实现方案

这是典型的「孤岛(连续区间)分组」问题,以下给出两种常用场景的实现方法,你的数据已经按Key和Time排序,可直接套用:

SQL实现(适用于数据库查询)

用窗口函数即可快速实现,逻辑如下:

SELECT 
    `Key`,
    `Time`,
    `Value`,
    `Indicator`,
    CASE WHEN Indicator = 'Y' 
         THEN SUM(flag) OVER (PARTITION BY `Key` ORDER BY `Time`) 
         ELSE NULL END AS `Index`
FROM (
    SELECT 
        *,
        -- 标记Y段的起始点:当前行是Y,且同Key下上一行不是Y(含首行场景)
        CASE WHEN Indicator = 'Y' AND LAG(Indicator, 1, 'N') OVER (PARTITION BY `Key` ORDER BY `Time`) = 'N'
             THEN 1 
             ELSE 0 END AS flag
    FROM your_table
) t

Python Pandas实现(适用于本地数据处理)

import pandas as pd

# 假设df为已按Key、Time排序的原始数据表
# 按Key分组处理连续Y段
for key, group in df.groupby('Key', group_keys=False):
    # 标记Y段的起始断点
    mask = (group['Indicator'] == 'Y') & (group['Indicator'].shift(1, fill_value='N') != 'Y')
    # 断点累加得到段号,仅Indicator=Y的行赋值
    df.loc[group.index, 'Index'] = mask.cumsum().where(group['Indicator'] == 'Y')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:02