用第二个DF填充DF

时间:2017-09-12 23:01:22

标签: python pandas numpy

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

我正在尝试根据第二个数据帧的值填充数据帧的所有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 个答案:

答案 0 :(得分: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

否则,您可以将NAN替换为np.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