Virat Kohli made his highest Test score with a domineering unbeaten double-century as India piled on the runs before South Africa lost three wickets on a one-sided day two in Pune.

Kohli reached three figures for the first time in the longest format this year and went on to make his seventh Test double-century with the tourists toiling in the heat on Friday.

The India captain crafted a magnificent 254 not out that included two sixes and 33 fours, before declaring with his team on a mammoth 601-5, with Ravindra Jadeja (91) and Ajinkya Rahane (59) making half-centuries on a flat pitch.

Kohli passed 7,000 Test runs and was given a life when he edged Senuran Muthusamy to Faf du Plessis on 208 as the spinner over-stepped.

South Africa face a battle to avoid going 2-0 down in the three-match series after they were reduced to 36-3 at stumps, Umesh Yadav (2-16) and Mohammed Shami making inroads.

The Proteas were unable to claim a breakthrough in the morning session after India resumed on 273-3 and Kohli brought up his 26th Test hundred with an exquisite straight drive for four off Vernon Philander.

Rahane took a liking to the pace of Anrich Nortje as he accumulated runs steadily, reaching his half-century in the morning session before India took lunch in command on 356-3.

Kohli punched Kagiso Rabada for two glorious boundaries in an over but a fourth-wicket stand of 178 ended when Rahane was caught behind to become Keshav Maharaj's 100th victim in the longest format.

Rabada's frustration mounted as Jadeja joined Kohli to continue piling on the runs, the skipper moving on to 150 as the Proteas attack suffered.

Jadeja came in with a license to swing and did just that, the boundaries flowing with Kohli having some luck as he cut just past Du Plessis at first slip on more than one occasion.

Du Plessis held on to seemingly remove Kohli shortly after he had tickled Muthusamy around the corner to bring up his double-century, but the captain was given a reprieve as the left-arm tweaker's front foot was well over the line.

Jadeja treated the crowd to his sword celebration after dispatching Aiden Markram to the ropes twice in an over before both the all-rounder and Kohli clattered Maharaj for six with disdain.

Kohli had 250 to his name when he slapped Dean Elgar over midwicket for four and declared after Jadeja holed out attempting to hit Muthusamy for six.

Umesh then did damage with the new ball, trapping Markram leg before without score before Elgar played on and Temba Bavuma edged Shami's first ball behind to put South Africa deeper in the mire.