0

0

如何基于起始日期与当前日期之间的周数重复数据行

碧海醫心

碧海醫心

发布时间:2026-02-04 22:23:01

|

767人浏览过

|

来源于php中文网

原创

如何基于起始日期与当前日期之间的周数重复数据行

本文介绍如何根据每行记录中日期字段与当前日期之间的完整周数,动态重复 dataframe 行,并为每条重复记录生成对应的 iso 周序号(week)和年份(year),确保时间序列连续、跨年正确、逻辑清晰。

在数据分析与报表生成中,常需将单条日期记录“展开”为以周为单位的时间序列——例如,为每个 ID 生成从其原始日期开始、直至当前周为止的每周快照。关键挑战在于:既要准确计算跨年周数,又要保证每周对应正确的 ISO 年份与周编号(如 2023-12-31 属于 2024 年第 1 周)。直接使用 .dt.days // 7 易因时区、闰年或 ISO 周规则(周一为每周起点,第1周含当年首个周四)导致偏差。

以下提供一种健壮、向量化、无需循环的解决方案,核心思路是:
✅ 使用 pd.Period 精确对齐周粒度(避免日期算术误差)
✅ 利用 Index.repeat() 高效复制行
✅ 通过 cumcount() + pd.to_timedelta() 逐周递增日期,再调用 .dt.isocalendar() 获取标准 ISO 周信息

完整实现代码

import pandas as pd

# 构建示例数据
df = pd.DataFrame({
    'ID': ['ID001', 'ID002', 'ID003'],
    'DATE': ['24/12/2023', '01/02/2024', '12/02/2024']
})
df['DATE'] = pd.to_datetime(df['DATE'], dayfirst=True)

# 步骤 1:计算每个 ID 从 DATE 到当前日期(含)的完整周数(含起始周)
now_period = pd.Timestamp('now').to_period('W')  # 当前 ISO 周
date_periods = df['DATE'].dt.to_period('W')      # 每行 DATE 所属 ISO 周
n_weeks = date_periods.rsub(now_period).apply(lambda x: x.n)  # 周差(非负整数)

# 步骤 2:按周数重复行(+1 是为了包含起始周本身)
repeated_df = df.loc[df.index.repeat(n_weeks + 1)].copy().reset_index(drop=True)

# 步骤 3:为每组重复行生成递增的周日期,并提取 ISO 年与周
# groupby(level=0) 在 repeat 后 index 有重复,用 cumcount() 生成 0,1,2... 偏移量(单位:天)
week_offsets = repeated_df.groupby(repeated_df.index).cumcount() * 7
base_dates = df['DATE'].reindex(repeated_df.index, method='ffill')
expanded_dates = base_dates + pd.to_timedelta(week_offsets, unit='D')

# 步骤 4:添加 YEAR 和 WEEK 列(使用 isocalendar 确保 ISO 标准)
cal = expanded_dates.dt.isocalendar()
repeated_df['YEAR'] = cal.year
repeated_df['WEEK'] = cal.week

print(repeated_df[['ID', 'DATE', 'YEAR', 'WEEK']])

输出示例(运行时刻为 2024 年第 7 周)

      ID       DATE  YEAR  WEEK
0  ID001 2023-12-24  2023    51
1  ID001 2023-12-24  2023    52
2  ID001 2023-12-24  2024     1
3  ID001 2023-12-24  2024     2
4  ID001 2023-12-24  2024     3
5  ID001 2023-12-24  2024     4
6  ID001 2023-12-24  2024     5
7  ID001 2023-12-24  2024     6
8  ID001 2023-12-24  2024     7
9  ID002 2024-02-01  2024     5
10 ID002 2024-02-01  2024     6
11 ID002 2024-02-01  2024     7
12 ID003 2024-02-12  2024     7

关键注意事项

  • ISO 周兼容性:.dt.isocalendar() 是 Pandas 中唯一严格遵循 ISO 8601 周标准的方法(区别于 .dt.week 已弃用),能正确处理年末/年初跨周(如 2023-12-31 → 2024-W01)。
  • 性能优化:全程避免 for 循环与 loc[i] 赋值,利用 repeat() 和 groupby().cumcount() 实现 O(n) 时间复杂度。
  • 边界处理:n_weeks + 1 确保起始周被包含;若某行 DATE 已在当前周之后,rsub() 返回负 Period,.n 为 0,该行仅保留 1 条记录(符合业务预期)。
  • 可扩展性:如需添加“WEEK_START”列(每周一日期),可在 expanded_dates 后调用 .dt.to_period('W').dt.start_time。

此方法兼具准确性、效率与可维护性,适用于周报聚合、滚动预测、时间维度建模等典型场景。

Unscreen
Unscreen

AI智能视频背景移除工具

下载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

72

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

3

2026.01.31

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

103

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

92

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

30

2025.12.30

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

474

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

282

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

742

2023.10.16

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

61

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 57.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号