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

如何对MultiIndex DataFrame进行降粒度重采样(日度转月末)并保留每月最后有效观测值

如何在MultiIndex Pandas DataFrame中提取每月最后一个有效观测值(重采样至月末)

你需要将带有date和groups双索引的日度数据转换为月末频率,同时保留当月最后一个有效日的各组数据,并且将日期标记为当月月末。下面是两种实用的解决方案:

方法一:Unstack + 重采样 + Stack

这种方法适合所有组的有效日期一致的场景,操作步骤清晰直观:

  1. Unstack分组索引:先把groups从索引转为列,让date成为唯一的行索引,这样就能直接复用单索引下的asfreq方法:
df_unstacked = df.unstack(level='groups')
  1. 月末重采样并填充:用asfreq('M', method='ffill')将日期重采样至月末,同时用当月最后一个有效观测值填充:
df_monthly_unstacked = df_unstacked.asfreq('M', method='ffill')
  1. 恢复MultiIndex结构:再把groups重新转为索引,并排序保证结构整洁:
df_monthly = df_monthly_unstacked.stack(level='groups').sort_index()

方法二:分组后单独处理

如果不同组的有效日期可能存在差异(比如某些组在某月的最后有效日和其他组不同),这种方法更灵活,对每个组单独执行重采样逻辑:

df_monthly = df.groupby(level='groups', group_keys=False).apply(
    lambda x: x.asfreq('M', method='ffill')
).sort_index()

结果验证

运行上述任意一种方法后,你都会得到符合预期的结果:日期被设置为当月月末,对应的值是该月最后一个有效日的各组数据,和你给出的示例输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:52:42