The hosts bundled out Bangladesh for 146 before lunch on the fifth and final day and, needing 95 for victory, reached 98-3 in just 104 balls in the second session.
Yashasvi Jaiswal reached his second fifty of the match in 43 balls including eight fours and one six before falling to Taijul Islam, ending a 58-run stand with Virat Kohli.
Kohli hit an unbeaten 29 and was there at the end as Rishabh Pant hit the winning boundary.
Bangladesh spinner Mehidy Hasan Miraz had earlier removed India captain Rohit Sharma, for eight, and Shubman Gill, for six.
The series victory extends India’s lead at the top of the World Test Championship (WTC) rankings ahead of Australia in second.
India rode on Jaiswal’s 72-run blitz in the first innings to force a result out of a match that saw no play on Saturday and Sunday because of rain and a wet outfield.
Bangladesh resumed their second innings on 26-2 on the final day, 26 runs behind, but the batting fell apart during the first session, with opener Shadman Islam top scoring on 50.
Ravichandran Ashwin, Ravindra Jadeja and Jasprit Bumrah took three wickets each.
Mushfiqur Rahim frustrated India as the lunch break was delayed for the final wicket. He was last man out when Bumrah bowled him for 37.