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

如何用Pandas将日度时间序列重采样为月度,取每月首个有效值

解决方法

你的问题出在resample('MS').first()只会取当月第一天的行数据,哪怕当天的DTB6是缺失值,它也不会自动往后查找第一个有效值。要实现“每月首个非缺失值”的需求,可以用以下两种方法:

方法一:先清理缺失值再重采样

先移除DTB6列的缺失行,再对清理后的数据按月份取第一个值:

# 移除DTB6为缺失值的行
df_clean = df.dropna(subset=['DTB6'])
# 按每月初重采样,取第一个有效值
monthly_data = df_clean.resample('MS').first()

这种方法简单直接,缺点是如果某个月全是缺失值,该月会直接从结果中消失。

方法二:自定义重采样逻辑(保留所有月份)

如果需要保留所有月份(即使当月无有效值也显示缺失),可以用resample结合自定义lambda函数,专门提取区间内第一个非缺失值:

monthly_data = df.resample('MS').apply(
    lambda x: x['DTB6'].dropna().iloc[0] if not x['DTB6'].dropna().empty else pd.NA
)
# 转成DataFrame格式(如果需要和原结构一致)
monthly_data = monthly_data.to_frame('DTB6')

这个逻辑会遍历每个月的区间:

  • 先过滤出该月内DTB6的非缺失值
  • 如果有有效值就取第一个,没有则返回pd.NA保留该月份

验证结果

可以用print(monthly_data)查看结果,比如5月1日缺失但2日有值的情况,结果里5月对应的就是2日的DTB6值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:02:08