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

Pandas如何筛选数据集最后5周对应的数据值

问题根源

你原代码无法运行的核心原因有3个:

  • dt.week返回的是整数类型的年内周编号(取值范围1-53),和timedelta时间差对象类型不匹配,直接做减法会触发类型错误。
  • 仅用周数做差没有处理跨年场景:如果数据集最新时间是新年第2周,周数减5会得到负数,无法匹配上一年年末的周数据,逻辑完全失效。
  • nlargest(5, 列名)的作用是返回指定列值最大的5行记录,不是返回最近5个周的全量数据,不符合需求。
实现方案

根据需求场景二选一即可:

方案1:取数据集中实际存在的最近5个自然周全量数据

这个方案会自动跳过数据中缺失的周,精准命中数据里最新的5个有记录的自然周,同时自动处理跨年问题,是最通用的实现:

# 生成ISO标准的年、周标识,避免跨年周数重复冲突
gdf_hpo['iso_year'] = gdf_hpo[DATE].dt.isocalendar().year
gdf_hpo['iso_week'] = gdf_hpo[DATE].dt.isocalendar().week

# 提取数据中按时间倒序排列的前5个唯一(年,周)组合
last_5_weeks = gdf_hpo[['iso_year', 'iso_week']]
                .drop_duplicates()
                .sort_values(by=['iso_year', 'iso_week'], ascending=False)
                .head(5)

# 关联筛选出对应周的所有行
gdf_last_5weeks = gdf_hpo.merge(last_5_weeks, on=['iso_year', 'iso_week'], how='inner')

方案2:取最新日期往前推5周时间窗口内的所有数据

如果你的需求是「以数据集最新日期为终点,取往前35天范围内的所有记录」,不需要对齐自然周边界,可以直接用时间范围筛选,代码更简洁:

# 获取数据集最新时间
max_date = gdf_hpo[DATE].max()
# 筛选时间在[最新日期-5周, 最新日期]区间的所有记录
gdf_last_5weeks = gdf_hpo[gdf_hpo[DATE] >= max_date - pd.Timedelta(weeks=5)]

补充:如果需要对齐自然周边界计算窗口(比如最新日期是周中,要从最近一个完整周的周一开始算5周范围),可以先把最新日期对齐到周起点再计算,以周一为周起点的对齐代码为:max_date = gdf_hpo[DATE].max().to_period('W').start_time

内容的提问来源于stack exchange,提问作者Thomas Rivière

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:48:11