基于列条件分配分组:解决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
相关产品推荐
相关产品推荐

