如何在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)
逻辑说明
- 分组偏移:
df.groupby('batch')['Code'].shift(-1)会对每个batch分组内的Code数据向上偏移一行,当前行因此获取到同组下一行的Code值,每组最后一行因无后续数据会生成NaN。 - 填充空值:
.fillna('END')将所有NaN替换为'END',满足每组最后一行的需求。 - 类型统一:最后转换为字符串类型是为了让
next_code列的数值和END格式统一,若不需要可省略此步骤。
这种方法是Pandas处理分组内偏移场景的标准高效方案,时间复杂度低,适配大规模数据集。
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

