2017-09-12 82 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