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

如何在DataFrame中为列值添加其出现位置的序号列?

解决DataFrame添加分组序列化名称列的问题

嘿,这个需求其实超简单的,不用你想的那种先提取唯一值和计数的绕路方式!直接用Pandas的分组累加功能就能完美解决,完全符合你要的按出现顺序编号的效果。

核心解法代码

首先构造你提供的示例DataFrame,然后一行代码就能生成目标列:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Name': ['foo', 'foo', 'bar', 'foo', 'bar', 'shoo', 'shoo', 'foo', 'bar', 'bar']
})

# 生成"Serialized Name"列
df['Serialized Name'] = df['Name'] + '-' + (df.groupby('Name').cumcount() + 1).astype(str)

代码解释

这里的关键是两个Pandas方法的组合:

  • df.groupby('Name'):把DataFrame按Name列的相同值分组,比如所有foo行归为一组,bar行归为另一组。
  • cumcount():对每个分组内的行从0开始顺序计数,加1后就能得到从1开始的序号,正好匹配你要的foo-1、foo-2这种格式。
  • 最后把序号转成字符串,和原Name值拼接就得到了目标列。

最终输出结果

运行代码后,你的DataFrame会变成:

NameSerialized Name
foofoo-1
foofoo-2
barbar-1
foofoo-3
barbar-2
shooshoo-1
shooshoo-2
foofoo-4
barbar-3
barbar-4

为什么不用你最初的思路?

你一开始想提取唯一值和计数列表的方式,其实会绕远路——因为你还需要对应每个行的位置去匹配序号,而groupby+cumcount是矢量化操作,直接对每个分组内的行按出现顺序生成序号,不仅代码简洁,处理大数据量时速度也快得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:28:00