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
相关产品推荐
相关产品推荐

