Ngidi finished with 6-71, his second-best career figures behind the 6-39 he took against India at Centurion in 2018. Rabada returned 3-72 and Marco Jansen wrapped up the innings with a first wicket on his debut when Bumrah was caught in the slips by Wiaan Mulder for 14.
Having set such a solid foundation on the first day, India received an early blow in the fourth over when opener KL Rahul tried to hook Rabada and was caught down the legside for 123, adding just one run to his score.
Ajinkya Rahane (48), Ravichandran Ashwin, (4), Pant (8), Shardul Thakur (4) and Mohammed Shami (8) all fell in the space of four overs as India faded after a promising start to its latest quest for a first test series win in South Africa.
The visitors scored 327 in the first innings. “Almost every Test innings has a collapse these days. Change the venue. Change the teams. Change the colour of the ball. Same story everywhere…almost every time,” wrote Aakash Chopra.