SQL条件分组需求:以Type='A'为起始创建Group列
按
Type="A"分组生成Group列的实现方法 现有包含Date和Type两列的数据表,需要新增Group列,规则为每当Type取值为"A"时,标记为一个新分组的起始,后续的"B"行归属于当前分组,效果如下:
| Date | Type | Group |
|---|---|---|
| 2019-09-26 | A | 1 |
| 2019-09-26 | B | 1 |
| 2019-10-09 | B | 1 |
| 2020-08-18 | A | 2 |
| 2020-09-25 | B | 2 |
| 2020-09-27 | B | 2 |
| 2021-02-19 | B | 2 |
| 2021-07-04 | A | 3 |
| 2021-08-04 | B | 3 |
| 2022-03-17 | A | 4 |
| 2022-05-01 | B | 4 |
| 2022-05-05 | B | 4 |
以下是不同工具的实现方案:
1. SQL实现
核心思路是用窗口函数累加Type="A"的出现次数,生成分组编号:
SELECT Date, Type, SUM(CASE WHEN Type = 'A' THEN 1 ELSE 0 END) OVER (ORDER BY Date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `Group` FROM your_table_name;
ORDER BY Date确保按时间顺序分组,窗口函数会从第一行到当前行累加符合条件的计数,得到连续的分组编号。
2. Pandas(Python)实现
利用布尔序列的累加操作直接生成分组:
import pandas as pd # 加载数据(示例为读取csv,可替换为其他加载方式) df = pd.read_csv('your_data.csv') # 生成Group列 df['Group'] = (df['Type'] == 'A').cumsum() # 输出结果 print(df)
df['Type'] == 'A'生成布尔序列(True对应1,False对应0),cumsum()对其累加,每次遇到"A"就递增分组编号,后续"B"保持当前编号。
3. Excel实现
假设数据从A2(Date)、B2(Type)开始,在C2单元格输入以下公式,下拉填充即可:
=SUM($B$2:B2="A")
混合引用$B$2:B2会随下拉扩展范围,计算从B2到当前行中"A"的数量,即分组编号。
内容的提问来源于stack exchange,提问作者skyzine
相关产品推荐
相关产品推荐

