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

ffill()在多级索引(MultiIndex)下未按预期工作

针对多级DatetimeIndex的定向向前填充方案

我懂你的困扰——默认的ffill()是沿着整个DataFrame的索引顺序逐行填充,而不是针对**相同内层contract_date**去跨外层assessment_date填充NA。既然是一次性场景,咱们用一个简单直接的临时办法就能解决:

解决方案:按内层索引分组后组内向前填充

核心思路是把每个相同的contract_date(内层索引)对应的所有行单独成组,然后在每组内部执行向前填充,这样就能保证同一合同日期下,前面评估日期的已知值会填充到后续评估日期的NA里。

修改你的代码片段如下:

# 先设置测试值
df3.loc['2010-01-31', '2011-01-02'] = 99

# 关键操作:按内层索引分组后组内ffill
df3 = df3.groupby(level='contract_date').ffill()

# 现在所有断言都会通过
assert df3.loc['2010-01-31', '2011-01-02'].values[0] == 99
assert df3.loc['2010-02-28', '2011-01-02'].values[0] == 99
assert df3.loc['2010-03-31', '2011-01-02'].values[0] == 99

为什么这个方法有效?

  • groupby(level='contract_date')会将DataFrame按内层的合同日期拆分,每个合同日期对应一组包含所有评估日期的行
  • 对每组单独执行ffill(),就会在同一合同日期的范围内,用前一个评估日期的已知值填充当前的NA,完全匹配你想要的填充逻辑

这个方法针对你的一次性场景非常高效,不需要复杂的通用适配,直接解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:58:01