Indian captain Mahendra Singh Dhoni smashed an unbeaten 92 off 86 balls to steer the hosts to 247-9 in the second one-day international in Indore on Wednesday.
India, electing to bat after winning the toss, were reduced to 124-6 in the 30th over by a relentless display of pace and spin bowling by the tourists.
Dhoni stepped in to lead the rescue act with the lower order, adding 41 for the seventh wicket with Bhuvneshwar Kumar (14) and 56 for the eighth with Harbhajan Singh (22).
The skipper finished with four sixes, including one off the final delivery from young paceman Kagiso Rabada, and seven boundaries.
Ajinkya Rahane was the only other batsman to shine with 51.
Fiery pace spearhead Dale Steyn claimed three wickets, while fast bowler Morne Morkel and leg-spinner Imran Tahir took two each.
The tourists lead the five-match series 1-0 after winning a high-scoring thriller in Kanpur by five runs on Sunday.
Rahane came to the crease in the second over after Rohit Sharma, who hit 150 in the previous match, was bowled by Rabada for three.
Rahane began by striking Steyn for three boundaries in the fifth over and reached his half-century in the 22nd over.
But he did not survive the next over as leg-spinner Imran Tahir bowled him round the legs as the batsman missed a sweep shot.
India’s batting woes at the top of the order were highlighted by the run out of star batsman Virat Kohli for 12 while attempting a second run when Rahane was dropped at mid-off by Farhaan Behardien.
Both batsmen were stranded at the non-striker’s end as bowler Steyn relayed Behardien’s throw to wicket-keeper Quinton de Kock, who broke the stumps.
South Africa retained the winning combination, while India made three changes, bringing in Patel, seamer Mohit Sharma and Harbhajan.
The trio replaced the injured Ravichandran Ashwin, leg-spinner Amit Mishra and all-rounder Stuart Binny.
South Africa had won the preceding Twenty20 series 2-0. The one-dayers will be followed by four Test matches.