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

如何在Pandas DataFrame中复制列并按分组添加三位递增序号?

Pandas按前缀分组添加递增序号后缀生成新列

原始数据

import pandas as pd

df = pd.DataFrame({
    'Column A': [
        'LineName-1',
        'LineName-2',
        'LineName-3',
        'BlockName-1',
        'BlockName-2',
        'BlockName-3'
    ]
})

需求说明

复制Column A生成新列Column B:给以LineName开头的行添加从001开始的递增序号后缀;以BlockName开头的行则重新从001开始递增添加后缀,最终效果如下:

期望输出

Column A  Column B
0   LineName-1  LineName-1_001
1   LineName-2  LineName-2_002
2   LineName-3  LineName-3_003
3   BlockName-1 BlockName-1_001
4   BlockName-2 BlockName-2_002
5   BlockName-3 BlockName-3_003

解决方案

核心思路是按前缀分组,给每组内的行生成连续的三位序号,再拼接成目标列。

简洁实现代码

# 直接生成Column B,无需中间列
df['Column B'] = df['Column A'] + '_' + (
    df.groupby(df['Column A'].str.split('-').str[0])
      .cumcount() + 1
).apply(lambda num: f'{num:03d}')

分步解释

  1. 提取分组前缀:df['Column A'].str.split('-').str[0] 将每行字符串按-分割,取第一部分作为分组标识(LineName/BlockName)。
  2. 生成组内序号:groupby(...).cumcount() + 1 对每个分组内的行从1开始计数,得到递增序号。
  3. 格式化序号:f'{num:03d}' 将序号格式化为带前导零的三位字符串,确保统一格式。
  4. 拼接生成新列:把原列内容和格式化后的序号用_拼接,得到Column B。

扩展说明

如果前缀的分隔符不是-,比如是下划线或其他符号,只需要调整str.split的参数即可。例如前缀是LineName_1,就改成str.split('_').str[0]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:16