首页 文章

用第二个DF填充DF

提问于
浏览
1

我在这看到了几个问题,但我找不到任何技巧 .

我正在尝试根据第二个数据帧的值填充数据帧的所有NaN值 . 第一个df是巨大的,第二个df将作为各种关键 .

DF1

    Part    System_Type   Replacement_Cost   Service_Life(Years)    Location

    nut       A/C             .09                 1                   TX
    Bolt      Generator        NAN                NAN                 MT
    screw     roof             .08                NAN                 UT
    screw     A/C              NAN                 3                  OH
    screw     roof             .08                NAN                 TX

    DF2
    Part    System_Type   Replacement_Cost   Service_Life(Years)  

    Bolt      Generator        .06                 2                
    screw     roof             .08                 3                
    screw     A/C              .08                 3

有这样的输出

Part    System_Type   Replacement_Cost   Service_Life(Years)    Location

    nut       A/C             .09                 1                   TX
    Bolt      Generator       .06                 2                   MT
    screw     roof            .08                 3                   UT
    screw     A/C             .08                 3                   OH
    screw     roof            .08                 3                   TX

我尝试使用df1.combine_first(df2),但我需要它来填充所有NAN,其中'Part'和'System_Type'都作为正确匹配数据的键 . 似乎没有填充所有缺失的值,只有少数几个 . 我的数据集是数百万行,所以每次特定的值集合出现时我都需要它来填充NAN(即每次看到螺丝和屋顶时,它应该将重置成本填入'.08'和服务生命为'3')

1 回答

  • 2

    假设那些 NANnp.nan

    df1.fillna(df1[['Part', 'System_Type']].merge(df2, 'left'))
    
        Part System_Type  Replacement_Cost  Service_Life(Years) Location
    0    nut         A/C              0.09                  1.0       TX
    1   Bolt   Generator              0.06                  2.0       MT
    2  screw        roof              0.08                  3.0       UT
    3  screw         A/C              0.08                  3.0       OH
    4  screw        roof              0.08                  3.0       TX
    

    否则,你可以用 np.nan 替换 NAN

    df1.replace('NAN', np.nan).fillna(df1[['Part', 'System_Type']].merge(df2, 'left'))
    
        Part System_Type Replacement_Cost Service_Life(Years) Location
    0    nut         A/C              .09                   1       TX
    1   Bolt   Generator             0.06                   2       MT
    2  screw        roof              .08                   3       UT
    3  screw         A/C             0.08                   3       OH
    4  screw        roof              .08                   3       TX
    

相关问题