更快的方式来填充NaN与groupby的最佳选择

时间:2017-05-26 21:34:17

标签: python pandas dataframe

我正在尝试在数据框中修复一些NaN值。我的计划是使用另外两个相关列(a和b)对行进行分组,并查看每个组中列c的最常见的非NaN值 - 然后使用它来填充NaN字段中的其他行。基。

我有下面的代码,但是非常非常慢 - 它现在已经在一个大约有300万行的数据帧上运行了几个小时。

有关如何更快地完成此操作的任何建议吗?

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 个答案:

答案 0 :(得分:2)

您可以尝试Series内置mode方法:

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