Prueba esto:
SELECT presupuestos_id, p.proyectos_id,
CONCAT(pr.proyectos_codigo,'_',
(CASE p.proyectos_id
WHEN @p_id
THEN @rownumber := @rownumber + 1
ELSE @rownumber := 1 AND @p_id := p.proyectos_id END)
)AS result
FROM presupuestos p
JOIN proyectos pr ON p.proyectos_id = pr.proyectos_id
JOIN (SELECT @rownumber:=0, @p_id:='') AS t