2017-05-26 44 views
0

我試圖修復一些數據幀中的一些NaN值。我的計劃是使用兩個其他相關列(a和b)對行進行分組,並查看每個組中最頻繁的列c的非NaN值,然後使用它填充其他行的NaN字段組。更快速的方式來填充NaN從羣體的最佳選擇由

我有下面的代碼,它可以工作,但是非常非常慢 - 它現在已經運行了幾個小時,現在有大約3百萬行的數據框。

有關如何更快做到這一點的任何建議?

def fillna_with_best(x): 
    m = mode(x['c']) 
    if m.count[0] > 0: 
     x['c'].fillna(m.mode[0], inplace=True) 
    return x 

df = df.groupby(['a', 'b']).apply(lambda x: fillna_with_best(x)) 

回答

1

你可以嘗試Series的內置mode方法:

df['c'] = df.c.groupby([df.a, df.b]).transform(lambda x: x.fillna(x.mode().iat[0]))