Lohse (3-0) won for the third time in four starts, holding the Pirates to six hits while not issuing a walk and fanning five.
The right-hander threw 69 of his 97 pitches for strikes and lowered his ERA to a sparkling 0.99 over 27 innings this season.
David Freese stroked a two-run single in the third inning and Rafael Furcal went 3-for-4 with a run-scoring hit as the National League Central-leading Cardinals took the rubber match of their three-game set with Pittsburgh.
Bucs starter Erik Bedard (0-4) surrendered three runs (two earned) on seven hits over seven frames.
Casey McGehee drove in the Pirates' only run.
Benedict Cumberbatch's dramatic reading of R. Kelly lyrics is just what you need
Jordana Brewster on Paul Walker: 'He was an enormous presence in my life'