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

如何在Python Pandas中按id分组并基于日期列生成排序序号列

在Pandas中按分组日期生成递增序号的实现方法

你可以通过分组结合计数/排名的方式快速实现需求,以下是两种实用方案:

方案1:分组后使用cumcount计数

cumcount()会对每个分组内的元素从0开始顺序计数,加1即可得到从1起始的序号。步骤如下:

  • 先按id和my_date升序排序,保证每个分组内日期从早到晚排列
  • 按id分组后调用cumcount()并加1,生成目标列col_x

代码示例:

import pandas as pd

# 示例数据(替换为你的实际DataFrame即可)
df = pd.DataFrame({
    'id': [111, 111, 111, 222, 222],
    'my_date': pd.to_datetime(['2023-05-15', '2023-05-14', '2023-05-13', '2023-10-11', '2023-10-12']),
    'col1': [1, 11, 2, 3, 55]
})

# 排序后生成序号
df = df.sort_values(['id', 'my_date'], ascending=[True, True])
df['col_x'] = df.groupby('id').cumcount() + 1

# 若需要恢复原始行顺序,添加此步骤(可选)
df = df.sort_index()

方案2:分组后使用rank直接排名

rank()方法可以直接对分组内的日期进行排名,指定ascending=True让最早日期对应1,method='first'可避免重复日期导致的排名冲突:

代码示例:

# 确保my_date是datetime类型(若未转换)
df['my_date'] = pd.to_datetime(df['my_date'])

# 直接生成序号
df['col_x'] = df.groupby('id')['my_date'].rank(method='first', ascending=True).astype(int)

补充说明

  • 方案1需要先排序,若要保留原DataFrame的行顺序,最后需调用sort_index();方案2无需排序,代码更简洁
  • 如果你的数据中存在重复日期,method='first'会按照行的先后顺序给重复日期分配不同的序号,若想让重复日期获得相同序号,可改为method='min'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:38:18