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

如何为pandas dataframe中的重复行生成序列号

给Pandas DataFrame的重复行生成序列号

嘿,这个需求用Pandas的groupby+cumcount()就能轻松搞定,我给你一步步讲清楚:

1. 先明确重复判断的依据

你提到是按id、时间点和日期来判断重复行,那我们就以这几列为分组依据。先看个模拟你的数据场景:

import pandas as pd

# 模拟你的数据场景
data = {
    'id': ['001', '001', '001', '002', '002'],
    'date': ['2024-05-20', '2024-05-20', '2024-05-21', '2024-05-20', '2024-05-20'],
    'time': ['10:00', '10:00', '10:00', '14:30', '14:30'],
    'value': [10, 10, 20, 30, 30]
}
df = pd.DataFrame(data)

2. 生成序列号的核心代码

直接用groupby按指定列分组,再用cumcount()给每组内的行计数(注意cumcount()默认从0开始,加1让序列号从1起始):

# 按id、date、time分组,生成从1开始的序列号
df['sequence'] = df.groupby(['id', 'date', 'time']).cumcount() + 1

3. 最终效果

运行后你的DataFrame会变成这样:

iddatetimevaluesequence
00012024-05-2010:00101
10012024-05-2010:00102
20012024-05-2110:00201
30022024-05-2014:30301
40022024-05-2014:30302

额外场景处理

如果你的重复判断是基于所有列(即整行值完全相同才算重复),可以直接用所有列作为分组键:

# 基于整行重复生成序列号
df['sequence'] = df.groupby(df.columns.tolist()).cumcount() + 1

小提示

  • 如果数据里有缺失值,groupby会把含NaN的行归为一组(因为NaN和NaN在分组时被视为相等),如果不想这样,建议先处理缺失值
  • 要是需要按特定顺序生成序列号,可以先对DataFrame排序,比如df = df.sort_values(['id', 'date', 'time']),再执行上面的分组计数操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:00:19