Pandas按指定行数划分DataFrame分组并新增group_id分组列
Pandas按固定行数分配分组ID实现方案
按指定x行拆分、自动给尾部不足额行分配独立分组ID的需求,用索引整数除法就能快速实现,不需要写循环或者复杂判断。
具体实现
以每3行分一组的场景为例,代码如下:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({'foo': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}) group_row_count = 3 # 自定义每组的行数,这里对应示例的3行一组 df['group_id'] = df.index // group_row_count + 1
运行后得到的结果和目标效果完全一致:
foo group_id 0 1 1 1 2 1 2 3 1 3 4 2 4 5 2 5 6 2 6 7 3 7 8 3 8 9 3 9 10 4
逻辑说明
- 核心是利用整数除法的向下取整特性:连续x个索引值除以x的整数结果完全相同,正好对应同一个分组的标记,最后加1是为了让分组ID从1开始计数,和示例效果对齐
- 不需要额外处理总行数不能被x整除的场景,最后不足x行的尾部数据会自动生成新的独立分组ID
- 如果DataFrame当前不是从0开始的连续整数索引,先执行
df = df.reset_index(drop=True)重置索引再计算即可,避免分组错位
内容的提问来源于stack exchange,提问作者rubslopes
相关产品推荐
相关产品推荐

