Ngidi, 21, did much of the damage as India lost seven wickets in an extended morning's play at SuperSport Park and were bowled out for 151 after resuming at 35 for three
Ngidi, 21, did much of the damage as India lost seven wickets in an extended morning's play at SuperSport Park and were bowled out for 151 after resuming at 35 for three.
Rohit Sharma provided some Indian resistance, scoring 47 before falling to a diving catch at fine leg by AB de Villiers off Kagiso Rabada.
He shared an eighth wicket partnership of 54 with Mohammed Shami (28).
Outstanding South African fielding accounted for India's first two wickets of the morning.
Cheteshwar Pujara was run out for the second time in the match in the fourth over of the day when De Villiers chased a ball to third man and sent a pinpoint throw to wicketkeeper Quinton de Kock as Pujara dived after attempting a third run.
Morne Morkel then held a sensational catch, running and diving at long leg after Parthiv Patel hooked a short ball from Kagiso Rabada.
Ngidi, who took the key wickets of Lokesh Rahul and Virat Kohli on Tuesday, followed up by having Hardik Pandya and Ravichandran Ashwin caught behind by De Kock.
Sharma's defiance ended at the scheduled lunch break but play was extended with a result in sight.
Shami fell to a mistimed pull shot against Ngidi, who finished the match by having Jasprit Bumrah caught at mid-off.
South Africa, ranked second in the International Cricket Council Test rankings, won the first Test in Cape Town by 72 runs.
The final Test of the three-match series will be played in Johannesburg from January 24 to 28.