如何在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
相关产品推荐
相关产品推荐

