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

