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

如何在Python中使用isocalendar按周聚合datetime数据

按周维度聚合替代dt.week的实现方案

原弃用警告翻译:
<ipython-input-50-d66026a79596>:1: FutureWarning: Series.dt.weekofyear and Series.dt.week have been deprecated. Please use Series.dt.isocalendar().week instead. df['week_num'] = df['date'].dt.week
译文:
<ipython-input-50-d66026a79596>:1: 未来版本兼容警告:Series.dt.weekofyear 和 Series.dt.week 方法已被弃用,请使用 Series.dt.isocalendar().week 替代。

场景1:单年度数据,直接替换原有写法即可

直接用dt.isocalendar().week替代原来的dt.week,计算逻辑和原有方法完全一致,不会触发警告:

# 替换后无警告的代码,运行结果和原方法完全一致
df['week_num'] = df['date'].dt.isocalendar().week
res = df.groupby('week_num').sum('quantity')
print(res)

运行结果和原方法一致:第4周的quantity总和为52,第8周的quantity总和为43。

场景2:跨年度数据,更严谨的聚合方式

如果数据包含多个年份的时间,只按周数聚合会把不同年份的同周数数据合并,建议同时提取ISO年和周数作为聚合维度:

# 提取ISO标准的年、周信息
iso_cal = df['date'].dt.isocalendar()
df['iso_year'] = iso_cal['year']
df['iso_week'] = iso_cal['week']

# 按年+周双维度聚合
res = df.groupby(['iso_year', 'iso_week']).sum('quantity')
print(res)

可选:生成更直观的周标识

如果需要更易读的周标签,可以直接生成每周的起始日期作为聚合键:

# 生成每周周一的日期作为周标识
df['week_start_date'] = df['date'].dt.to_period('W').dt.start_time
res = df.groupby('week_start_date').sum('quantity')
print(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:05