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

气象时间序列周平均计算:groupby与groupby+resample结果存在差异的原因咨询

这两种方法结果存在差异主要来自两个核心原因,咱们一步步拆解清楚:

1. 周时间区间的定义完全不同

  • 方法1的resample('W-Sat', label='right', closed='right')是严格按照**自然周(以周六为结束日)**划分区间的:
    • W-Sat指定每周的结束节点是周六;
    • closed='right'表示每个周区间包含右边界(即周六当天的数据),区间范围是(上一周周六, 本周六];
    • 结合你的起始日期2012-08-01(周三),第一个完整周的结束日是2012-08-04(周六),第二个周结束日是2012-08-11(周六),以此类推。
  • 方法2的[i//7 for i in range(0,27)]是按日期顺序硬切每7天一组,完全不考虑实际星期几:
    • 假设你的日期序列是从2012-08-01开始连续的,第一组是第0-6天(8.18.7),第二组是7-13天(8.88.14),和方法1的自然周区间完全不重叠,计算的本来就是不同时间段的平均,结果必然有差异。

2. 数据聚合的计算逻辑不同

  • 方法1是直接对原始分钟级数据按周区间做全局平均:每个周的平均值是该区间内所有原始记录的数值总和除以记录总数,每条原始数据的权重相同。
  • 方法2是先按date做日平均(把每天的所有记录先算一个平均值),再对日平均结果做每7天的平均:这里相当于每个日平均的权重是1,不管当天有多少条原始记录。比如某天有100条数据,另一天只有10条,日平均后这两天在周平均里的权重一样,但方法1中那天100条数据的权重会远大于10条的那天,两种计算方式的结果自然会有细微差别。

修正方法2的建议

如果想要让方法2的结果和resample对齐,可以先给每条数据标记对应的自然周结束日,再按周分组:

# 给每条数据添加对应周的结束日(周六)
df['week_end'] = df['date'].dt.to_period('W-Sat').dt.end_time.dt.date
# 按站点和周结束日分组求平均
weeklydata_gb_fixed = df.groupby(['station', 'week_end'], as_index=False).mean().sort_values(by='week_end')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:19:08