Aleksandar Kolarov and Federico Fazio struck to secure the win after Lazio striker Ciro Immobile had cancelled out Lorenzo Pellegrini’s opener.
Roma came into the derby against their bitter rivals sitting 10th in the table having taken just eight points from their opening six games.
But the victory extends their unbeaten home run to six matches and lifts last season’s beaten Champions League semi-finalists, at least temporarily, up to fifth and to within a point of Lazio.
Lazio began the game on the front foot and posed the greater goal threat in the opening 20 minutes. Daniele De Rossi and Fazio had to make blocks to deny Immobile and Luis Alberto, before Martin Caceres fired over from close range.
But Roma were the side to force the first saves of the game as Thomas Strakosha pushed away strikes from Edin Dzeko and Javier Pastore in the 24th minute.
Pastore was forced off through injury, to be replaced by Pellegrini after 37 minutes. The midfielder made the breakthrough eight minutes later, capitalising on a loose ball inside the Lazio box to produce a delightful backheel into the net, giving Roma a half-time lead.
The visitors made a double substitution shortly after the break and it seemed to spark them into life again as Sergej Milinkovic-Savic fired narrowly wide before Immobile forced a low save from Roma keeper Robin Olsen.
Immobile stunned the Stadio Olimpico after 67 minutes by drawing Lazio level. Fazio’s control was clumsy and Immobile stole the ball before firing across Olsen and into the bottom corner.
But parity lasted for just four minutes as Roma reclaimed the lead through a superb free-kick from Kolarov, who curled the ball into the bottom left-hand corner from 20 yards.
Milinkovic-Savic drew another save from Olsen as Lazio threatened to pull level again, but Roma put the game to bed four minutes from time. Fazio atoned for his earlier error by rising highest to meet Pellegrini’s free-kick and power a header home.