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.