0

0

如何基于日期间隔按周数重复数据行

花韻仙語

花韻仙語

发布时间:2026-02-04 22:29:06

|

991人浏览过

|

来源于php中文网

原创

如何基于日期间隔按周数重复数据行

本文介绍如何根据每行日期与当前日期之间的完整周数,动态重复dataframe中的行,并为每条重复记录生成对应的iso周数(week)和年份(year),实现精准的时间维度展开。

在数据分析中,常需将单条时间记录“展开”为多个时间切片(如按周、月),尤其适用于周报聚合、滚动预测或时间序列对齐场景。本文解决的核心问题是:对每一行的 DATE,计算其到当前日期(pd.Timestamp('now'))之间包含多少个完整自然周(含起始周),然后将该行重复对应次数,并为每次重复分配递增的ISO周编号(含跨年处理)

关键难点在于:

  • 周数计算需基于 ISO 周历(isocalendar()),而非简单天数除以7;
  • 重复后每行的 WEEK 应从原始日期所在周开始,逐周递增(如2023-12-24属2023年第51周,则后续为52、1、2…);
  • 必须正确处理跨年(如2023-W52 → 2024-W01);
  • 避免循环操作,保证向量化性能。

✅ 推荐方案(高效、健壮、一行逻辑清晰):

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:计算每个日期到当前日期的完整ISO周数(含起始周)
# 使用 Period 进行周对齐,避免日历偏差
current_week = pd.Timestamp('now').to_period('W')
date_weeks = df['DATE'].dt.to_period('W')
n_weeks = (current_week - date_weeks).apply(lambda p: p.n)  # 得到整数周差

# 步骤2:按周数+1重复行(+1 因为包含起始周本身)
# 使用 loc + index.repeat 实现向量化重复
repeated = df.loc[df.index.repeat(n_weeks + 1)].copy().reset_index(drop=True)

# 步骤3:为每组重复行生成递增周序列(从原始日期开始,每周+7天)
# groupby(level=0) 不适用(已重置索引),改用 cumcount() 配合原始分组标识
# 更稳健做法:先恢复分组标识,再计算偏移
group_ids = repeated.index.to_series().groupby(repeated.index // 1).ngroup()  # 实际可直接用 cumcount 分组
# 简洁写法(推荐):
offset_days = repeated.groupby(repeated.index // 1).cumcount() * 7
repeated['WEEK_DATE'] = df.loc[repeated.index // 1, 'DATE'].values + pd.to_timedelta(offset_days, unit='D')

# 步骤4:提取 ISO 年份与周数
repeated['YEAR'] = repeated['WEEK_DATE'].dt.isocalendar().year
repeated['WEEK'] = repeated['WEEK_DATE'].dt.isocalendar().week

# 最终结果(保留原始列 + YEAR/WEEK)
result = repeated[['ID', 'DATE', 'YEAR', 'WEEK']].copy()
print(result)

? 输出说明(以运行时刻为2024-02-25左右为例):

Unscreen
Unscreen

AI智能视频背景移除工具

下载
  • ID001(2023-12-24)→ 跨年覆盖 W51(2023)、W52(2023)、W01–W07(2024),共9行;
  • ID002(2024-02-01)→ 从 W05 开始至 W07,共3行;
  • ID003(2024-02-12)→ 仅 W07(因2月12日属第6周?实际需看ISO规则;示例中显示为W07,表明当前为2月25日前后)。

⚠️ 注意事项:

  • pd.Timestamp('now') 在生产环境中建议替换为固定基准日期(如 pd.Timestamp('2024-02-25')),确保结果可复现;
  • isocalendar() 返回的 week 是 ISO 8601 标准(周一为每周第一天,W01为包含当年第一个周四的周),与 strftime('%U') 或 %W 行为不同;
  • 若需严格按“日历周”(周日为始)而非ISO周,请改用 .dt.strftime('%Y-%U') 并手动解析;
  • 大数据量时,避免 for 循环和 loc[i] 赋值——原问题中循环覆盖索引导致逻辑错乱,正是性能与正确性双重风险点。

? 总结:使用 Period('W') 对齐周粒度 + index.repeat() 向量化重复 + cumcount() 构建偏移序列,是处理此类“时间维度展开”任务的最优范式。它兼顾准确性(ISO周历)、简洁性(无显式循环)与扩展性(易于适配月/季度等粒度)。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

46

2025.09.03

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

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

474

2023.07.04

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

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

282

2023.08.07

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

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

742

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

519

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

76

2025.09.08

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

56

2025.10.14

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

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

32

2026.02.04

学习通网页版入口与在线学习指南 学习通官网登录与使用方法
学习通网页版入口与在线学习指南 学习通官网登录与使用方法

本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。

6

2026.02.04

热门下载

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

精品课程

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

共18课时 | 5.2万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.4万人学习

Django 教程
Django 教程

共28课时 | 3.9万人学习

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

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