Schwindel’s single through the right side scored Alfonso Rivas, who started the rally with a pinch-hit single off Michael Lorenzen (0-2) and advanced to second on a wild pitch.
Schwindel is batting .441 (15 for 34) with six homers and 14 RBIs during his current eight-game hitting streak.
“The skill set is the prerequisite for being good, and he has it,” Cubs bench coach Andy Green said.
The Reds (73-66) lost for the seventh time in nine games. They dropped to one game back of idle San Diego for the second NL wild card.
Codi Heuer, Scott Effross (2-0) and Adam Morgan combined for four scoreless innings in relief of Justin Steele. Morgan got three outs for his second save.
Chicago’s bullpen has allowed two earned runs in its last 35 innings.
Tyler Stephenson reached on an infield hit with one out in the seventh, but Heuer got Nick Castellanos to ground into a double play.
Ian Happ hit a three-run homer in the first for the Cubs. Happ is batting .349 (30 for 86) with eight homers and 20 RBIs in his last 23 games.
Steele sailed into the sixth, but the rookie left-hander departed after he hit Asdrubal Cabrera with a pitch with the bases loaded and none out. Heuer then threw a wild pitch, allowing Castellanos to score, and Max Schrock tied it at 3 with a pinch-hit double down the left-field line.
Green praised Happ for preventing Schrock’s double from rolling to the wall, causing Cabrera to stop at third.
“He saved the game,” Green said.
Heuer then retired pinch-hitter Mike Moustakas on a popup, stranding runners on second and third.
After allowing the homer to Happ, Reds starter Sonny Gray retired 15 of his final 16 batters.
“It felt like he struck out every hitter,” Reds manager David Bell said. “All of his pitches had life and movement.”
Lorenzen, however, said his lack of an effective changeup played a role in Rivas’ single completing a 10-pitch at-bat and Schwindel’s game-winning hit.
“That whole inning changes if I have my best pitch,” said Lorenzen, who had to rely mostly on his cutter.
“I got singled to death, but that’s the difference. When you pitch to contact, that can happen.”
RARE REST FOR VOTTO
Reds first baseman Joey Votto was out of the starting lineup despite his .422 batting average this season against the Cubs heading into the series. He pinch-hit in the ninth and lined out to center for the final out.
“A couple times along the way I almost gave him an off day, but it’s hard to keep him out of the lineup,” Bell said. “But today felt like the right day.”
ROSS STILL BOSS
Despite being sidelined by a positive COVID-19 test, Cubs manager David Ross continues to submit the lineup. Green said he often speaks to Ross multiple times before and after games.
Ross and President of Baseball Operations Jed Hoyer, who also was vaccinated and tested positive, will be required to remain in isolation through Sept. 12.
Cubs: INF David Bote (right ankle sprain) was activated from the 10-day injured list. INF Austin Romine was designated for assignment. … INF Nico Hoerner (right oblique strain) performed baseball drills prior to Monday’s game but isn’t close to returning.
Reds left-hander Wade Miley (11-5, 2.97 ERA) starts Tuesday night. Miley allowed five runs and 12 hits in four innings in a 5-4 loss to the Cardinals on Sept. 1. Right-hander Adrian Sampson (0-1, 1.59 ERA) pitches for the Cubs.