Rookie shortstop Jose Ramirez singled in rookie pinch-hitter Tyler Holt with the winning run following a sacrifice bunt by rookie catcher Roberto Perez, pinning the loss on Buchanan.
"In that situation, a tie game in the ninth inning, you turn the ball over to the long man and it's his game until you bring in the closer," Porter said.
Holt pinch-hit for right fielder Chris Dickerson and hit a leadoff single. After Perez bunted Holt up a base, Michael Bourn walked.
Both runners moved up on a wild pitch on a 2-2 count before Ramirez lined the next pitch to left field for his game-winning single and the Indians' 10th walk-off win of the season.
"On 2-2, [Ramirez] checked his swing and foul-tipped a curveball. I went back to the curve and buried it, and it ended up being a wild pitch," Buchanan said. "We had a base open and I tried to nibble because I didn't want to walk him with probably their best batter [Michael Brantley] on deck. [Ramirez] kind of committed to the outside fastball and went down and got it."
The Astros lost for just the second time in their last six games as they built a 2-0 lead in the third inning but couldn't hold it. They dropped to 13-22 in one-run games.
Buchanan felt the key part of the winning rally was Holt's single.
"That first batter, he's kind of an ambush hitter," Buchanan said. "The scouting report said he swings at 50 percent of first pitches and I threw him a fastball down the middle. It kind of went downhill from there."
Cody Allen got the win after pitching a 1-2-3 ninth inning, the last of four pitchers who combined on a three-hitter. He took the loss Friday night when the Astros scored four runs in the ninth to win, 5-1.
"We had a good streak offensively where we were scoring a lot of runs and swinging the bats well, but we've had a couple of games here where we haven't swung the bats well," Porter said. "We have faith in our guys, though. They'll start swinging the bats and things are going to turn around."
Neither starting pitcher factored in the decision.
The Astros' Collin McHugh, who had won his previous two starts, allowed two runs and eight hits in 5 1/3 innings while walking one and striking out two. He has a 1.76 ERA in his last five starts.
"The fastball command wasn't great today and they had eight lefties in the lineup so I knew I'd be cutter-heavy going into it," McHugh said. "Ideally, you'd like to have a better mix of pitches and I didn't really have my curveball. You battle with what you got, and that's what I had to do."
The Indians' Danny Salazar gave up two runs --- one earned --- and three hits in six innings with two walks and seven strikeouts. He had lost his previous two starts.
Ramirez, Lonnie Chisenhall and Dickerson had two hits each for the Indians.
The Astros took a 2-0 lead in the third inning when Jose Altuve hit a two-out single to right field that scored Jake Marisnick. Robbie Grossman also scored from first base on the play when Dickerson, the right fielder, threw wildly to home plate in an attempt to get Marisnick, raising the Indians' error total to a Major League-high 100.
The Indians made it 2-1 when Brantley broke an 0-for-15 slump with a two-out RBI single in the third inning, and Bourn drove in a run with a groundout in the fourth to make it 2-2.
"It's a heck of a lot better hearing music after a game," Indians manager Terry Francona said. "And this one wasn't easy, but we did some things. We got some bunts down. We forced the issue a little bit. They made a couple errors that helped us and we're playing at home with the last at-bat."