如何用Pandas按同一ID每5条记录生成带序号的新ID
按ID分组每5条生成带序号的新ID
问题场景
现有如下Pandas DataFrame:
import pandas as pd df = pd.DataFrame({'id':[100,100,100,100,100,100,100,100,100,100,100,200,200,200,200,200,200]})
需要基于id列,每5条相同id的记录生成一个带序号的新ID:
- 100有11条记录,生成
100_1(前5条)、100_2(后6条) - 200有6条记录,生成
200_1 - 若某id(如400)有15条记录,生成
400_1、400_2、400_3
解决方案
通过分组累计计数、整数除法计算组号,最后拼接生成新ID:
# 1. 按id分组,计算组内累计序号(从0开始),每5条划分为一组,组号从1开始 df['group_num'] = df.groupby('id').cumcount() // 5 + 1 # 2. 拼接原id和组号,生成新ID df['new_id'] = df['id'].astype(str) + '_' + df['group_num'].astype(str) # 3. 提取唯一的新ID,生成结果DataFrame out = pd.DataFrame(df['new_id'].unique(), columns=['new_id'])
输出结果
new_id 0 100_1 1 100_2 2 200_1
关键逻辑说明
groupby('id').cumcount():为每个id分组内的记录从0开始生成连续序号// 5:整数除法,将每5条记录划分为一组(0-4对应第1组,5-9对应第2组,以此类推)+1:将组号从0起始转为1起始,符合需求中的序号格式unique():提取每个id对应的所有分组新ID,避免重复
内容的提问来源于stack exchange,提问作者keymeans
相关产品推荐
相关产品推荐

