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

如何用Pandas为跨年度起止日期生成唯一时间步周编号

自定义连续周编号生成方案

需求说明

现有包含start_date、end_date和country列的Pandas DataFrame,数据覆盖多个年份。需要新增一列标记每行数据的时间步周编号:将数据中首次出现的周标记为1,后续周依次递增,不受年度周数规则及country列重复的影响。isocalendar().week仅能获取对应年份的周数,无法满足该需求。

解决方案

核心思路是基于start_date的唯一值按出现顺序分配连续编号,具体实现如下:

import pandas as pd
import numpy as np

# 生成示例数据
dates = pd.date_range(start='2021-11-11', periods=20, freq='W')
df = pd.DataFrame({
    'start_date': np.repeat(dates, 5),
    'end_date': np.repeat(dates + pd.DateOffset(days=6), 5),
    'country': ['USA', 'Canada', 'UK', 'Australia', 'Russia'] * 20
})
df = df.sort_values("start_date")

# 新增连续周编号列
df['week_step'] = pd.factorize(df['start_date'])[0] + 1

# 查看结果
print(df.head(10))

代码解释

  • pd.factorize(df['start_date'])会将start_date中的唯一值按首次出现顺序分配从0开始的整数标识,加1后得到从1起始的连续周编号。
  • 由于已提前按start_date排序,首次出现的周会被标记为1,后续周依次递增,完全不受年度周数限制和country重复的影响。

未排序数据的兼容处理

如果DataFrame未提前按start_date排序,可先对start_date排序后再生成编号:

# 先排序,再生成编号
df = df.sort_values('start_date')
df['week_step'] = pd.factorize(df['start_date'])[0] + 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:43:27