我需要在数据框的一列中按组进行填充。需要注意的是,每个组的第一个值都是通过构造得到的,因此从不缺失。目前我有以下解决方案。
df = pd.DataFrame({'a': [1,1,2,2,2], 'b': [1, np.nan, 2, np.nan, np.nan]})
# desired output
a b
1 1
1 1
2 2
2 2
2 2
以下是我迄今为止尝试过的三种解决方案。
# really slow solutions
df['b'] = df.groupby('a')['b'].transform(lambda x: x.fillna(method='ffill'))
df['b'] = df.groupby('a')['b'].fillna(method='ffill')
# much faster solution, but more memory intensive and ugly all around
tmp = df.drop_duplicates('a', keep='first')
df.drop('b', inplace=True, axis=1)
df = df.merge(tmp, on='a')
这三种方法都能产生我期望的输出结果,但前两种在我的数据集上需要很长时间,而第三种解决方案的内存使用更多、感觉相对笨重。是否还有其他方法可以对列进行向前填充?
ffill
,因为组中的第一个值始终存在,即df['b'] = df['b'].ffill()
。 - root