If you want to update df1 in-place do:
using Impute
for sdf in groupby(df1,:id)
sdf.a .= Impute.locf(sdf.a)
end
or
transform!(groupby(df1, :id), :a => Impute.locf => :a)
if you want a new data frame:
transform(groupby(df1, :id), :a => Impute.locf => :a)