如何通过指定条件创建新列:按1的出现位置生成递增分组序号
实现思路
这个需求的逻辑非常简单,核心就是维护一个分组序号计数器,遍历数据时遵循两个规则即可:
- 每遇到值为1的元素,就把分组序号加1
- 所有元素的输出值都取当前的分组序号
运行过程完全匹配你给出的示例:第一个元素为1,分组序号从0变为1,后续4个0都输出1;第六个元素为1,分组序号变为2,后续3个0都输出2;第十个元素为1,分组序号变为3,后续2个0都输出3。
常见场景实现示例
纯Python实现
raw_data = [1,0,0,0,0,1,0,0,0,1,0,0] result = [] group_id = 0 for num in raw_data: if num == 1: group_id += 1 result.append(group_id) print(result) # 输出:[1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3]
Pandas实现
直接用累计求和函数cumsum()即可,逻辑和纯遍历完全一致:
import pandas as pd df = pd.DataFrame({'val': [1,0,0,0,0,1,0,0,0,1,0,0]}) df['group_id'] = df['val'].cumsum()
Excel实现
假设原始数据存放在A列,从A1开始,B1输入以下公式后下拉即可:=SUM(A$1:A1)
SQL实现
需要保证数据有明确的排序字段(假设为id),用窗口求和函数即可:
select val, sum(val) over(order by id) as group_id from 你的表名;
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

