Yadav pulled the first ball he faced, from Archer, for a six and raced to a 28-ball half-century.
India crossed the 50-mark in the seventh over before Stokes extended KL Rahul’s batting slump and Rashid unleashed a googly to deceive home captain Virat Kohli who was dismissed stumped for one.
Yadav smashed three sixes before Dawid Malan took a low catch at fine leg to send him back. Replays, however, suggested the ball might have touched the grass.
Rishabh Pant made a breezy 30 and Shreyas Iyer contributed 37 to push India past the 175-mark.
England lost Jos Buttler early in their chase, and Malan made 14 before Rahul Chahar bowled him around his legs.
Roy fell in the next over after a quickfire 40 but Stokes threatened to take the game away with a blistering 46.
The all-rounder smashed three sixes before Thakur turned the game on its head, dismissing Stokes and England captain Eoin Morgan in successive deliveries.
The teams play the deciding final Twenty20 international at the same venue on Saturday before moving to Pune for a three-match one-day series beginning on Tuesday.