如何按条件聚合表格,为同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
相关产品推荐
相关产品推荐

