2017-05-26 45 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]))