This does not answer the question exactly however I thought it provides a different approach to the solution.
Instead of the lag() approach (which is the perfect solution for this problem) you could choose to ignore the 'Adjustments' altogether with the exception of the initial record.
The result is similar it just removes the repeated rows (which don't really add any value do they?).
Keeping the Rank shows the number of rows removed ... and at scale would reduce the size of the dataset without removing any information -> which I think is the goal of any data practitioner.
Any thoughts welcomed :-)

with cte as (
SELECT 'A' AS grp, 1 AS rnk, 'New business' AS category FROM DUAL
UNION ALL SELECT 'A' AS grp, 2 AS rnk, 'Adjustment' FROM DUAL
UNION ALL SELECT 'A' AS grp, 3 AS rnk, 'Adjustment' FROM DUAL
UNION ALL SELECT 'A' AS grp, 4 AS rnk, 'Renewal' FROM DUAL
UNION ALL SELECT 'A' AS grp, 5 AS rnk, 'Adjustment' FROM DUAL
UNION ALL SELECT 'A' AS grp, 6 AS rnk, 'Cancellation' FROM DUAL
UNION ALL SELECT 'B' AS grp, 1 AS rnk, 'New Business' FROM DUAL
UNION ALL SELECT 'B' AS grp, 2 AS rnk, 'Renewal' FROM DUAL
UNION ALL SELECT 'B' AS grp, 3 AS rnk, 'Adjustment' FROM DUAL
UNION ALL SELECT 'B' AS grp, 4 AS rnk, 'Cancellation' FROM DUAL
UNION ALL SELECT 'C' AS grp, 1 AS rnk, 'Adjustment' FROM DUAL )
select
cte.*
from
cte
left outer join
(select grp,rnk,category from cte where iff(rnk=1,'z',category)!='Adjustment') yay on yay.grp cte.grp and yay.rnk=cte.rnk
where yay.grp is not null;