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

如何在Pandas中按分组添加下一行Code列值的新列?

问题描述

现有如下DataFrame:

batch  Code
a      100
a      120
a      130
a      120 
b      140
b      150
c      100

需求为添加一列next_code,其值为同batch分组下一行的Code列值,每组最后一行该列值为END,期望输出如下:

batch  Code  next_code
a      100   120
a      120   130
a      130   120
a      120   END
b      140   150
b      150   END
c      100   END

请问实现该需求的最优方法是什么?

最优实现方法

可以利用Pandas的groupby结合shift方法高效完成需求,具体代码如下:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'batch': ['a', 'a', 'a', 'a', 'b', 'b', 'c'],
    'Code': [100, 120, 130, 120, 140, 150, 100]
})

# 添加next_code列
df['next_code'] = df.groupby('batch')['Code'].shift(-1).fillna('END')

# 可选:统一列类型为字符串(若需要数值与END格式一致)
df['next_code'] = df['next_code'].astype(str)

print(df)

逻辑说明

  1. 分组偏移:df.groupby('batch')['Code'].shift(-1) 会对每个batch分组内的Code数据向上偏移一行,当前行因此获取到同组下一行的Code值,每组最后一行因无后续数据会生成NaN。
  2. 填充空值:.fillna('END') 将所有NaN替换为'END',满足每组最后一行的需求。
  3. 类型统一:最后转换为字符串类型是为了让next_code列的数值和END格式统一,若不需要可省略此步骤。

这种方法是Pandas处理分组内偏移场景的标准高效方案,时间复杂度低,适配大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:05:29