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

Pandas resample按月重采样取月首数据如何保留NaN值

问题原因

你使用的resample("MS").first()逻辑存在两个不符合需求的点:

  • pandas的first()聚合函数默认逐列跳过NaN值,会分别取每列当月第一个非空结果,而非取完整的整行数据
  • 基于MS(月起始)的重采样会强制将索引修改为当月第一天,不会保留原始数据中第一个可用日期的索引

解决方案

改用按月分组后直接提取每组第一行的逻辑实现需求,代码如下:

import pandas as pd

# 按月分组后取每组的第一行,完整保留原始行的所有值与索引
result = df.groupby(pd.Grouper(freq='MS')).head(1)

验证示例

针对你给出的样例数据,完整测试代码如下:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame(
    [[np.nan, 4], [3, 5], [5, 2]],
    index=pd.to_datetime(['2010-10-04', '2010-10-05', '2010-10-06']),
    columns=['col1', 'col2']
)

# 执行聚合逻辑
result = df.groupby(pd.Grouper(freq='MS')).head(1)
print(result)

运行后输出结果和预期完全一致:

col1  col2
2010-10-04   NaN     4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:57:02