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

如何在Pandas中对分组内每n行进行递增标记

问题描述

现有如下DataFrame:

import pandas as pd
df = pd.DataFrame([["A",1],["A",2],["A",3],["B",4],["C",5],["C",6],["C",7],["C",8],["C",9],["C",10]],columns=["id","val"])

对应的表格:

idval
A1
A2
A3
B4
C5
C6
C7
C8
C9
C10

需要新增一列grp,按id列分组后,每n行(示例中n=2)进行递增标记:同一id下每2行标记为同一序号,之后序号依次递增。预期输出如下:

df_out = pd.DataFrame([["A",1,1],["A",2,1],["A",3,2],["B",4,1],["C",5,1],["C",6,1],["C",7,2],["C",8,2],["C",9,3],["C",10,3]],columns=["id","val","grp"])

对应的表格:

idvalgrp
A11
A21
A32
B41
C51
C61
C72
C82
C93
C103
解决方案

可以通过Pandas的分组与累计计数方法实现,步骤如下:

  1. 按id列分组,对每组内的行生成从0开始的连续计数
  2. 将计数结果按每组行间隔n做整数除法,最后加1得到从1开始的分组序号

具体代码(以n=2为例):

n = 2
df['grp'] = df.groupby('id').cumcount() // n + 1

原理说明

  • df.groupby('id').cumcount():为每个id分组内的行生成从0开始的连续整数,比如id=A对应0,1,2,id=C对应0,1,2,3,4,5
  • // n:整数除法会把每n个连续计数归为同一值,比如n=2时,0//2=0、1//2=0、2//2=1,以此实现每2行一组
  • +1:将从0起始的分组序号转为从1起始,匹配预期输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:37:11