India captain Virat Kohli won the toss and put the hosts into bat as they made one change by bringing in Shardul Thakur in place of Bhuvneshwar Kumar in the playing XI.
Hashim Amla and captain Aiden Markram gave the Proteas a solid start but Shardul Thakur drew first blood by removing Amla for 10 runs courtesy a brilliant catch from Shreyas Iyer at covers.
AB de Villiers and Markram steadied the South African innings but Yuzvendra Chahal gave India the much needed breakthrough by dismissing de Villiers for 30.
India kept picking up wickets as South Africa failed to get any partnership going.
Khaya Zondo fought a lone battle, notching up his maiden ODI fifty. For India, Shardul was the pick of the bowlers with figures of 4/52.
Chasing a modest target, India lost Rohit Sharma (15) early in the fourth over to Lungi Ngidi.
But Virat Kohli and Shikhar Dhawan added 61 runs for the second wicket in nine overs. Dhawan, after a watchful 18 off 34 balls, fell to Ngidi in the 13th over.
India raised to 100 runs in 14.3 overs. Virat Kohli soon raced to his 47th ODI fifty in just 36 balls, hitting nine boundaries.
Kohli and Rahane made sure that there were no more hiccups in the chase.
Indian captain continued his superb form in the series as he notched up his 35th ODI century in 82 balls, as he helped India overhaul the target of 205 runs in 32.1 overs with eight wickets in hand.
He also became the first batsman ever to score 500 or more runs in a bilateral ODI series.