Carpenter set the tone, hitting a leadoff home run in the first inning. The Cardinals went on to win for the seventh time in nine games.
Piscotty and Yadier Molina each had three of the Cardinals' season high-tying 19 hits.
Carlos Martinez (12-7) gave up one run and four hits over eight innings. He also got two hits himself.
Roughed up for the second straight start, deGrom (7-7) allowed five runs on 12 hits in 4 2/3 innings. He was tagged for a career-worst eight runs and 13 hits in his previous outing against San Francisco.
Carpenter was back in the leadoff spot after several games hitting third. His 16th homer this year was his third leadoff homer of the season.
Piscotty drove in the go-ahead run in the third with an infield single.
Grichuk, who had doubled earlier, hit his 17th homer in the fourth. Piscotty connected for his 19th homer, a two-run drive, in the fifth.
Greg Garcia and Molina later had RBI singles.
The Mets said Bruce was taken out for precautionary reasons. He hit .158 in his first 20 games with the Mets after being traded over from Cincinnati.
Mets: LHP Jonathan Niese (left knee) is headed for surgery after getting hurt in a start Tuesday night.
Cardinals: Lance Lynn, coming off reconstructive elbow surgery last November, made his third rehab start at Double-A Springfield. There's a chance the right-hander could help in the bullpen before the season ends.
Cardinals: Adam Wainwright (9-7, 4.71) allowed four home runs in 6 2/3 innings on July 27 and got a no-decision in his lone appearance against the Mets this season.