2017-09-12 54 views
1

我看到了几个问题,但没有发现我的工作技巧。填写DF与第二个DF

我想基于第二个数据帧的值填充数据框的所有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与“部分”和“System_Type”既充当钥匙匹配正确地记录数据。它似乎并没有填充所有的缺失值,只是其中的一小部分。我的数据集是数百万行,所以我需要它在每次出现特定的一组值时填充NAN(即每次看到螺钉和顶部时,它应该将重置成本填充为'.08'和“使用寿命” '3')

回答

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

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 
+0

更换NAN我不断收到无效的索引错误,但列名是相同的。索引错误中也没有任何内容,它只是说InvalidIndexError: – EEPBAH