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

基于列条件分配分组:解决DataFrame中id重复的分组难题

解决DataFrame重复id的连续分组问题

原始DataFrame结构

id  col_1
0   3   1
1   3   2
2   3   3
3   3   4
4   1   1
5   1   2
6   1   3
7   2   1
8   2   2
9   3   1
10  3   2
11  3   3
12  4   1

目标结果

id  col_1   col_new
0   3   1   group1
1   3   2   group1
2   3   3   group1
3   3   4   group1
4   1   1   group2
5   1   2   group2
6   1   3   group2
7   2   1   group3
8   2   2   group3
9   3   1   group4
10  3   2   group4
11  3   3   group4
12  4   1   group5

实现思路

观察分组规则:连续出现的相同id为一个独立分组,而非所有相同id归为一组。核心是检测id列的连续变化边界,再基于边界生成分组标识。

代码实现

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'id': [3, 3, 3, 3, 1, 1, 1, 2, 2, 3, 3, 3, 4],
    'col_1': [1, 2, 3, 4, 1, 2, 3, 1, 2, 1, 2, 3, 1]
})

# 1. 检测连续分组的起始行:当前行id与上一行不同时标记为True
group_boundary = df['id'] != df['id'].shift()

# 2. 累加边界标记,得到唯一的分组编号
df['group_num'] = group_boundary.cumsum()

# 3. 转换为目标格式的分组名称
df['col_new'] = 'group' + df['group_num'].astype(str)

# 可选:删除中间辅助列
df = df.drop('group_num', axis=1)

print(df)

运行后即可得到目标结果,其中:

  • shift()方法将id列整体下移一行,用于和当前行对比
  • cumsum()对布尔值(True=1,False=0)累加,生成连续分组的唯一编号
  • 最后通过字符串拼接将编号转为groupX格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:24