如何基于连续相同日期为数据行编号?同连续日期同号,日期变化则编号递增
连续相同日期区块编号实现方案
核心逻辑
不需要关心日期本身的取值,只需要按确定的行顺序,将当前行日期和上一行日期做对比,每次出现不一致时编号加1,相同则沿用前一行的编号即可。
常用场景实现
SQL 场景
前提:存在确定行顺序的列(示例中第一列,假设命名为id),日期列命名为dt,需要处理的表名为your_table。
通过窗口函数实现:
SELECT id, dt, SUM(change_flag) OVER(ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS group_num FROM ( SELECT id, dt, -- 与上一行日期不同标记为1,相同标记为0,第一行默认标记为1 CASE WHEN dt = LAG(dt) OVER(ORDER BY id) THEN 0 ELSE 1 END AS change_flag FROM your_table ) t
Excel 场景
前提:行顺序就是Excel默认的行顺序,日期数据放在B列,第一行数据为第2行(第1行为表头),编号放在C列。
- 第一行编号C2直接填入
1 - 第二行开始填入公式:
=IF(B3=B2,C2,C2+1) - 把公式下拉到所有数据行即可
Python Pandas 场景
前提:DataFrame已按行顺序排好序,日期列命名为dt
# 对比当前行与上一行日期,不一致的位置标记为True(对应数值1),累加后就是分组编号 df['group_num'] = df['dt'].ne(df['dt'].shift()).cumsum()
内容的提问来源于stack exchange,提问作者Russ Suter
相关产品推荐
相关产品推荐

