Zambrano won for the first time since his banishment for a dugout tantrum in June, helping the Cubs win for just the third time in 17 games, 3-2 over St. Louis, snapping the Cardinals' four-game winning streak.
"St. Louis has good hitters and any time I face them I have to give a little extra," Zambrano said. "Today everything was working -- split-finger, my sinker and my slider."
Chris Carpenter (13-4) gave up three runs in six innings. He was 4-0 with a 1.79 ERA over his previous six starts.
Zambrano (4-6) allowed seven hits in 5 2/3 innings, struck out three and walked two. He is 5-0 with a 1.85 ERA for his career at the new Busch Stadium.
Carlos Marmol got the final five outs for the save, his 20th in 24 chances but his first since July 26.
St. Louis manager Tony La Russa watched from a private box as he finished up a two-game suspension for his role in a brawl Tuesday at Cincinnati.
"You just don't feel like you're part of it, other than a fan," La Russa said. "You've got a helpless feeling but it makes it look a lot easier from up there than it is from on the field."
Zambrano has had a tough year -- a 5.46 ERA entering the game and a dugout blowup with Lee on June 25 that led to the Cubs placing him on the restricted list. He was solid in his return start at San Francisco on Monday, allowing two runs in five innings in a no-decision, and better Saturday.
"He had more velocity, threw more strikes," Cubs manager Lou Piniella said. "He looked more confident on the mound. I told him after the game, 'Just keep improving."
Zambrano said he felt more comfortable this time.
"Today was more calm and just go out there and have fun," Zambrano said. "You just throw the ball and whatever happens, happens."
Zambrano struck out Colby Rasmus three times and cooled off one of baseball's hottest teams -- St. Louis had scored at least four runs every game this month and was hitting .306 for August coming into the game.
Carpenter is certainly used to the stifling heat and humidity of a St. Louis summer, but admittedly struggled on a 93-degree day with a heat index of 107 degrees. TV showed him in the dugout after the third inning with a wet towel draped over his head, and he said that the heat initially took a toll.
"It was hot. It got to me, but I was able to come up here and change, toweled off. I was able to collect myself and then get back where I needed to be," he said.
The two Cardinals aces -- Carpenter and Adam Wainwright -- were a combined 20-2 at Busch Stadium this season. Carpenter was 9-2 with a 2.75 ERA at home before Saturday. He allowed six hits, struck out three and walked none.
Ramirez hit the first pitch of the second inning 408 feet for a homer, his 17th, into the Cubs bullpen in left field. The Cubs added another run in the second on Koyie Hill's RBI single.
Lee hit his 14th homer with two outs in the third.
St. Louis missed a two-out chance in the fifth when Holliday grounded out with the bases loaded. The Cardinals cut the margin to 3-2 in the sixth on a two-out single by Skip Schumaker, a wild pitch and a single by pinch-hitter Randy Winn.
The Cardinals had one last chance in the ninth when Aaron Miles led off with an infield single and went to second on Ramirez's throwing error. But Brendan Ryan popped out trying to bunt, Felipe Lopez fouled out and Allen Craig struck out.
"He's not the easiest guy to bunt," La Russa said of Marmol. "Those are the ones you have to get down because they're tough to bunt. You don't have any margin for error."
Lopez was 0 for 4 and is 2 for 32 since Aug. 6. ... The Cubs have used 15 rookies this season, tied with Detroit for the most in baseball. ... The sellout crowd of 46,313 was the second-largest of the season at Busch, behind only opening day. ... Kosuke Fukudome made a strong over-the-shoulder catch as he slammed into the right-field wall to rob Holliday of a fourth-inning hit. ... Pujols was 2 for 4 but failed to score a run for the first time in 12 games.