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

使用pd.Grouper对分层时序数据8天重采样时数据丢失问题咨询

问题解答

1. Grouper函数使用问题

你的Grouper语法本身没有错误,但有几个容易被忽略的点会导致结果条数和预期不符:

  • 只有分组内存在至少1条有效数据时,groupby才会返回对应分组的结果,没有观测值的空周期不会出现在结果中
  • freq='8D'默认从全局时间序列的最早日期开始对齐计算周期,不会为各站点单独对齐时间范围
  • 如果你的多级索引没有按时间排序,重采样逻辑也可能出现异常,建议先执行polar_temp = polar_temp.sort_index()再做重采样操作

另外你可以先做基础数据核对:统计原始数据中不同站点的总数,8天一个周期的情况下,单个站点每年最多生成46条结果,18年最多生成828条结果,如果你的站点总数在70个左右,6万条结果是完全符合预期的,你可以自行核对数量是否匹配。

2. 闰年是否导致该问题

不是,freq='8D'是按自然日逐次累加8天计算周期,和闰年、月份天数规则都没有关联,不会因为闰年出现数据遗漏。

3. 其他重采样实现方法

你可以用resample方法替代groupby+Grouper的写法,逻辑完全等价,可读性更高:

# 按站点分组后对日期维度做8天重采样求均值
polar_temp8d = polar_temp.groupby(level='Station_Number').resample('8D', level='Date').mean()

如果你需要保留所有站点的所有周期(包括没有观测值的空周期,空值填充NaN),可以手动补全所有时间分组:

# 补全所有站点和所有8天周期的组合,空值填NaN
all_stations = polar_temp.index.get_level_values('Station_Number').unique()
all_dates = pd.date_range(start=polar_temp.index.get_level_values('Date').min(),
                          end=polar_temp.index.get_level_values('Date').max(),
                          freq='8D')
full_index = pd.MultiIndex.from_product([all_stations, all_dates],
                                        names=['Station_Number', 'Date'])
polar_temp8d_full = polar_temp8d.reindex(full_index)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 00:15:03