The tourists batted first and but could not get a good enough total on the board after being bowled out for 270, despite Quinton de Kock hitting a 106 off 89 balls.
India then knocked off the target with ease, motoring to the total with more than 10 overs to spare as Yashasvi Jaiswal finished unbeaten on 116 from 121 deliveries.
Temba Bavuma had lost the toss for the first time in the three games and the Proteas were immediately under the pressure when Ryan Rickelton edged behind in the first over.
De Kock and Bavuma then added 113 before the skipper fell for 48 just as the Proteas wanted to accelerate in the 21st over.
Matthew Breetzke scored 24 while Aiden Markram fell cheaply after coming in at number five following his hundred in the second ODI while opening.
De Kock, meanwhile, brought up a 23rd hundred in the 50-over format for the Proteas but did not kick on as would have hoped after being clean bowled by seamer Prasidh Krishna in the 33rd over.
With both te previous matches in the series producing first innings total of more than 340, the 270 was never going to be enough at a quick-scoring venue.
The home side did not have any false starts with bat as Jaiswal and opening partner Rohit Sharma put on 155 to to the hosts in the firmly in the driving seat.
Rohit eventually fell for 75 but Kohli finished on 65 not out, to go with his two hundreds in the series, as India cantered to victory.