Python 在多索引数据框中填写缺少的组

Python 在多索引数据框中填写缺少的组,python,pandas,multi-index,fillna,Python,Pandas,Multi Index,Fillna,我有以下建议: date family ID value 2019 abc 10 0.5 15 0.3 xyz 22 0.4 40 1.1 2020 xyz 22 1.9 46 0.3 仅当系列在日期中不存在时,我才希望转发填充值。在上面的例

我有以下建议:

date      family    ID    value
2019      abc       10    0.5
                    15    0.3 
          xyz       22    0.4
                    40    1.1
2020      xyz       22    1.9
                    46    0.3
仅当
系列
日期
中不存在时,我才希望转发填充
。在上面的例子中,
ID
value
会将abc的填充值向前推到2020年,但不会将xyz的填充值向前推到2020年

我尝试了
df.unstack(['family','ID']).fillna(method='ffill')
,但是在上面的示例中,这将错误地转发族xyz的填充ID 40

预期结果是:

    date      family    ID    value
    2019      abc       10    0.5
                        15    0.3 
              xyz       22    0.4
                        40    1.1
    2020      abc       10    0.5
                        15    0.3    
              xyz       22    1.9
                        46    0.3

一旦
unstack
,您可能需要检查一年内没有家庭数据的地方,可以通过
groupby.trasnform
any
进行检查。然后使用
unstack
dataframe
ffill
ed上的where仅保留要填充的值。在
fillna
中使用此选项。然后堆叠回去

df_u = df.unstack(['family','ID'])
df_ = df_u.fillna(
             df_u.ffill()
                 .where(~df_u.groupby(level='family', axis=1)
                             .transform('any'))
           ).stack(['family','ID'])
print (df_)
                value
date family ID       
2019 abc    10    0.5
            15    0.3
     xyz    22    0.4
            40    1.1
2020 abc    10    0.5
            15    0.3
     xyz    22    1.9
            46    0.3

df.unstack(['family','ID']).ffill().stack(['family','ID'])
似乎可以按预期工作。您是否只有两年的时间,或者如果2021年abc也不存在,该怎么办?(它会在未来的所有年份进行提前填充吗?)abc会进行提前填充,直到它在随后的一年再次出现,类似于fillna行为。