填写多索引熊猫数据框中的缺失组

时间:2020-07-08 16:16:01

标签: python pandas multi-index fillna

我有以下df:

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

仅当value中不存在family时,我才想向前填充date。在上面的示例中,IDvalue会将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

1 个答案:

答案 0 :(得分:1)

一旦unstack,您可能需要检查一年中没有该家庭的数据,可以通过groupby.trasnformany来完成。然后使用unstack数据框ffill上的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