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

如何对DataFrame按id分组后逐行递增组内val列的值?

pandas按分组逐行递增列值实现方法

首先构造测试数据集:

import pandas as pd

# 初始化示例DataFrame
df = pd.DataFrame({
    'id': ['a', 'a', 'a', 'b', 'b'],
    'group': [1, 2, 3, 1, 2],
    'val': [10, 10, 10, 25, 25]
})

核心实现逻辑

利用pandas分组的累计计数函数生成每行的偏移量,和组内基准val相加即可,不需要写循环,执行效率很高:

# 通用写法:无论同组初始val是否一致都能正确运行
df['val'] = df.groupby('id')['val'].transform('first') + df.groupby('id').cumcount()

运行后得到的结果完全匹配预期:

id  group  val
0  a      1   10
1  a      2   11
2  a      3   12
3  b      1   25
4  b      2   26

逻辑说明

  • groupby('id').cumcount():会按行顺序给每个id分组内的记录生成从0开始的连续整数,正好对应每行需要递增的偏移量:组内第一行加0(保留原值),第二行加1,第三行加2,以此类推
  • groupby('id')['val'].transform('first'):取每个id分组内第一行的val值作为整个组的基准值,避免同组初始val存在差异时计算出错
  • 如果你能确定同组内所有初始val值完全相同,可以用更简洁的写法:
df['val'] = df['val'] + df.groupby('id').cumcount()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:21:39