Kohli scored 186 runs, his 28th test hundred and his highest test score against Australia, as India finished with 571 (178.5 overs) runs in its first innings to take a lead of 91 runs over Australia’s first-innings total of 480 runs.
At stumps, Matthew Kuhnemann and Travis Head (3 not out) negotiated six overs with Australia at 3-0 in its second innings, trailing by 88 runs.
First innings centurion Usman Khawaja did not open the innings after suffering a suspected knee injury while fielding with Kuhnemann a surprising choice to replace him. The night-watchman survived as Srikar Bharat missed a sharp catching chance in the penultimate over.
Post lunch, Kohli got to his 75th international hundred off 241 balls, including five fours. He had faced 162 deliveries without hitting a boundary, and after reaching his milestone, started playing more attacking strokes. Overall, he hit 15 fours.
It was Kohli’s 16th international hundred against Australia, and second slowest test hundred in terms of balls faced.
Srikar Bharat meanwhile scored 44 runs off 88 balls, including two fours and three sixes. He added 84 runs for the fifth wicket with Kohli, before falling to Nathan Lyon.
India went to tea at 472-5, with Kohli-Patel adding 162 runs for the sixth wicket. The duo batted for 37.1 overs while chasing down the Australian lead.
The hosts were ahead by 75 runs by the time Patel got out after scoring 79 off 113 balls.
Kohli also picked up the slack and reached 150 off 313 balls, adding seven more fours since reaching his century.
Mitchell Starc (1-97) finally bowled Patel in the 173rd over, and the Indian lower order suffered a mini collapse thereafter.
Kohli was last man out, caught in the deep off Todd Murphy (3-113) with Shreyas Iyer failing to come out to bat owing to a lower-back issue. He reportedly went to a local hospital for scans and is being monitored by the Indian medical team.
Lyon finished with 3-151 from 65 overs, the most he has ever bowled for Australia in a single test innings.