Nolan Arenado went 2-for-3 with a walk, a run and an RBI for the Cardinals, who won for the sixth time in eight games
Cardinals starting pitcher Jordan Montgomery (5-7) allowed two runs, one earned, on six hits in 6 2/3 innings. He struck out six batters and walked one
Giovanny Gallegos got four outs, and Jordan Hicks handled the ninth inning for his fifth save.
Framber Valdez (7-6) gave up four runs on eight hits and three walks in six innings for the Astros, who lost for the eighth time in 11 games. He struck out six
Houston scored an unearned run in the first inning to take a 1-0 lead. Mauricio Dubon reached on an error, moved to third base on Alex Bregman's single and scored when Kyle Tucker grounded into a forceout.
Martin Maldonado doubled Houston's lead to 2-0 with a third-inning homer, but DeJong's solo shot in the bottom of the frame cut the deficit to 2-1.
The Cardinals overcame a baserunning error in the fourth inning to tie the game. Willson Contreras hit a leadoff double but was thrown out while belatedly attempting to take third base on Jordan Walker's infield single deep into the shortstop hole
Dylan Carlson followed with a single, Brendan Donovan walked and DeJong hit a sacrifice fly to make it 2-2.
The Cardinals moved ahead 4-2 in the fifth inning. Paul Goldschmidt drew a one-out walk and scored on Arenado 1,600th career hit, a double to the right field wall
Arenado moved to third on an errant relay throw on that play, then he scored on a wild pitch with the help of a successful replay challenge.
The Astros loaded the bases with two outs in the seventh inning. Gallegos then replaced Montgomery and retired pinch hitter Bligh Madris on a flyout, and Houston didn't threaten again
--Field Level Media