Houston's offense struggled to get going, managing only six hits in the game and four off Cubs starter Travis Wood. Wood (6-11) pitched 7 2/3 innings, giving up one run and striking out six.
The Astros' lone run came in the eighth when Fernando Martinez pinch-hit an RBI single to score Brandon Barnes immediately after Wood was replaced by Shawn Camp. Fernandez is 9-for-19 in September, via MLB.com's Brian McTaggert.
Chicago opened the scoring with an RBI single from Welington Castillo in the first inning. Alfonso Soriano pushed the lead to 2-0 with a solo homer in the fifth and to 3-0 with an RBI single in the seventh.
The Cubs' Anthony Recker added an RBI double in the eighth, and Tony Campana scored on a Chris Snyder throwing error in the ninth.
Houston used six pitchers in the game, including Mickey Storey, who took a liner in the face from Dave Sappelt in the eighth and had to leave the game. Fernando Abad (0-4) started and took the loss after giving up one run and four hits in 3 1/3 innings.
The Astros scored one run in each of the three games in the series, dropping two of three. They will open a four-game home series against the Philadelphia Phillies on Thursday night at 7:05 p.m. CT.
Read more on the Astros at The Crawfish Boxes and SB Nation Houston. Head over to Bleed Cubbie Blue and SB Nation Chicago for more on the Cubs. Baseball Nation is your source for news and analysis around Major League Baseball.