如何对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
相关产品推荐
相关产品推荐

