我正在尝试在数据框中修复一些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))
答案 0 :(得分:2)
您可以尝试Series
内置mode
方法:
df['c'] = df.c.groupby([df.a, df.b]).transform(lambda x: x.fillna(x.mode().iat[0]))