Jason Jaramillo went 2-for-4 with a double 3, in the middle test of a game series.
Brad Lincoln (2-3) allowed two runs on six hits over five-plus innings to earn the win. He walked four and struck out four.
Jason Grilli stranded a runner in scoring position in the ninth to record his first save of the season and the third of his career.
Josh Harrison went 4-for-5 and was a home run short of the cycle for the Pirates, who have won three of four.
"We have been swinging the bats better," said Pittsburgh manager Clint Hurdle. "We've gone through some very dry periods and came out swinging better."
Travis Wood (6-6) lasted just 2 2/3 innings, surrendering four runs on seven hits to suffer the loss.
Joey Votto doubled twice and drove in a pair for the Reds, losers of six of eight.
Brandon Phillips began the game with a double and scored two batters later on Votto's ground-rule double to left for a 1-0 Reds lead.
The Pirates evened the score in the second, as Ryan Ludwick worked a leadoff walk, moved to third on Jaramillo's double and scored on Ronny Cedeno's sacrifice fly.
A three-run third put the Pirates ahead for good. Harrison led off with a triple and scored on Andrew McCutchen's subsequent sacrifice fly. Derrek Lee singled and Neil Walker doubled to place runners at second and third before Ludwick's sacrifice fly made it a 3-1 contest. Jaramillo followed with an RBI single to drive Wood from the game.
"In the last start of the season, you always want to finish strong," said Wood. "But it didn't happen that way."
Meanwhile, the Reds wasted a one-out double by Juan Francisco in the second and a Phillips leadoff double in the third before Votto's two-bagger scored Dave Sappelt in the fifth.
An inning later, a leadoff double by Francisco drove Lincoln from the game, but Jared Hughes fanned the next three batters to escape.
Phillips began the top of the ninth with a single. With two outs, he advanced to second on a wild pitch, but Grilli grounded out Chris Heisey to end the game. Game Notes
Lincoln is 3-7 in 23 career games -- 17 starts...Wood entered the game with a career-high 16-inning scoreless streak...The Reds were 3-for-17 with runners in scoring position and left 10 men on base...Pittsburgh went 2-for-11 with runners in scoring position and stranded 10.