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

Python中基于二进制列生成特定分组规则的group_id列

解决基于二进制列生成自定义分组ID的问题

问题说明

需要基于二进制列diff生成group_id,规则如下:

  • 每个值为1的行对应独立且递增的group_id
  • 连续的0行归为同一个group_id,不同组的连续0使用新的group_id

当前使用df['group_id1'] = df['diff'].cumsum()得到的结果不符合预期,期望得到示例中的group_id2效果:

diffgroup_id1group_id2
0111
1012
2012
............
9123
10134
............
1801012
1901012

解决方案

核心思路是先标记所有新分组的起始行,再对标记列做累加得到目标分组ID:

import pandas as pd

# 构造示例数据
data = {
    'diff': [1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0]
}
df = pd.DataFrame(data)

# 标记新分组起始行:diff为1,或当前是0且前一行是1
df['is_new_group'] = (df['diff'] == 1) | ((df['diff'] == 0) & (df['diff'].shift(1) == 1))

# 累加标记列生成目标group_id2
df['group_id2'] = df['is_new_group'].cumsum()

# 查看结果
print(df[['diff', 'group_id2']])

结果解释

  • is_new_group列会在每个1行、每个连续0块的第一行标记为True
  • 对该列执行cumsum()后,每个标记点会生成一个新的递增ID,完全匹配需求:
    • 每个1行对应唯一ID
    • 同一连续0块共享一个ID,不同0块ID依次递增

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:27:37