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

如何用Pandas从日期列生成以最早日期为起点的连续周数

解决Pandas中生成自定义连续周数列的问题

问题描述

现有一个包含2019年起日期列的大型Pandas数据集,需实现以下需求:

  • 先将日期列按从早到晚排序
  • 以数据集中最早的有效采集日期为起点,每7天划分为一周,生成连续递增的周数列(如第1周、第2周……第N周),新增为单独列
  • 此前使用pd.to_datetime(df['date'], errors='coerce').dt.week生成的周数存在重复,无法满足连续递增的要求

解决方案

核心思路是:以数据集的最早有效日期为基准,计算每个日期与基准日的天数差,通过整数除法得到对应的连续周数(起始周记为第1周)。具体步骤如下:

步骤1:日期列清洗与转换

先将日期列转换为datetime类型,同时处理缺失值(文本NaN会被转换为时间类型的缺失值NaT):

import pandas as pd

# 原始数据
data = {'date': ['2019-09-10', 'NaN', '2019-10-07', '2019-11-04', '2019-11-28',
       '2019-12-02', '2020-01-24', '2020-01-29', '2020-02-05',
       '2020-02-12', '2020-02-14', '2020-02-24', '2020-03-11',
       '2020-03-16', '2020-03-17', '2020-03-18', '2021-09-14',
       '2021-09-30', '2021-10-07', '2021-10-08', '2021-10-12',
       '2021-10-14', '2021-10-15', '2021-10-19', '2021-10-21',
       '2021-10-26', '2021-10-28', '2021-10-29', '2021-11-02',
       '2021-11-15', '2021-11-16', '2021-12-01', '2021-12-07',
       '2021-12-09', '2021-12-10', '2021-12-14', '2021-12-15',
       '2022-01-13', '2022-01-14', '2022-01-21', '2022-01-24',
       '2022-01-25', '2022-01-27', '2022-01-31', '2022-02-01',
       '2022-02-10', '2022-02-11', '2022-02-16', '2022-02-24']}
df = pd.DataFrame(data)

# 转换日期类型,处理缺失值
df['date'] = pd.to_datetime(df['date'], errors='coerce')

步骤2:确定周数计算的起始基准

过滤掉无效日期后,取最早的有效日期作为周数计算的起点:

# 获取有效日期的最小值作为起始基准
start_date = df['date'].dropna().min()

步骤3:生成连续周数列

计算每个日期与起始日的天数差,通过整数除法得到对应的周数(加1是因为起始周记为第1周):

# 计算每个日期对应的连续周数,无效日期设为None
df['weeks'] = df['date'].apply(
    lambda x: (x - start_date).days // 7 + 1 if pd.notna(x) else None
)

步骤4:按日期排序

最后将数据集按日期从早到晚排序,完成需求:

df = df.sort_values('date').reset_index(drop=True)

效果验证

运行上述代码后,df['weeks']列会生成完全连续递增的周数,例如:

  • 起始日2019-09-10对应第1周
  • 2019-10-07距离起始日27天,27//7 +1 =4,对应第4周
  • 2022-02-24距离起始日907天,907//7 +1=130,对应第130周

完全避免了dt.week带来的跨年度周数重复问题,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:45:33