Bernardo Silva and Leroy Sane struck for the visitors in 12 second-half minutes at Old Trafford to inflict a seventh defeat in nine games on United, who remain three points adrift of the top four.
City have now won 11 straight Premier League games and further victories over Burnley, Leicester and Brighton will ensure Liverpool's 29-year wait to win the title continues no matter what Jurgen Klopp's men do in their remaining three games.
United boss Ole Gunnar Solskjaer made five changes in response to his side's 4-0 humiliation at Everton on Sunday and was rewarded with a far more energetic and committed performance even if City's greater quality eventually shone through.
Guardiola hits back at Solskjaer's 'tactical' fouling jibe
Yet, Arsenal's defeat at Wolves means the Red Devils are still very much in the race for Champions League qualification, should they beat fourth-placed Chelsea at home on Sunday.
Guardiola made just three changes from the team that gained some measure of revenge on Tottenham for their Champions League elimination last week, but the decision to recall captain Vincent Kompany seemed a questionable one early on as the Belgian struggled to deal with United's pace up front.
Kompany was booked for barging Marcus Rashford just 10 minutes in as United enjoyed a bright start.
Paul Pogba tested Ederson from long range before Jesse Lingard's acrobatic volley from the Frenchman's cross flew just wide.
United goalkeeper David de Gea's form has dipped dramatically of late and it was another night to forget for the Spaniard as he could have done better for both goals.
And the differing performances of the two goalkeepers proved key as City stopper Ederson rushed from his goal to make a brilliant challenge at Rashford's feet as the England striker raced in behind Kompany once more.
Title, top four and pride at stake in massive Manchester derby
Solskjaer has bemoaned United's fitness levels in recent weeks and again after an early burst, they started to flag as City created a spurt of chances either side of half-time.
Firstly, Raheem Sterling shot too close to De Gea after weaving through a host of United bodies inside the area before Sergio Aguero dragged well wide when unmarked at the edge of the box.
Guardiola was forced into an early change in the second-half and showed his intent by replacing holding midfielder Fernandinho with the goal threat of Sane.
And that positivity was instantly rewarded when Bernardo cut inside onto his favoured left foot and beat De Gea at his near post.
Within a minute, City were inches away from doubling their lead when a fine team move teed up Aguero to smash the outside of the post.
United had one huge chance to level when Lingard failed to connect at the far post with the goal gaping.
Sane has been scarcely used by Guardiola of late, but the German, whose winning goal inflicted Liverpool's only league defeat of the season in January, again showed his capability to make a difference in the biggest games.
Sterling led a City counter-attack before feeding Sane, whose powerful shot De Gea could not keep out.
City may have to wait another year for Champions League glory, but they are now bearing down on history in the English game with four games separating them from a first ever domestic treble.
COMMENTS
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ