Chasing a competitive 172 for victory, Rohit Sharma (28 off 19) and Quinton de Kock gave a perfect start to Mumbai's innings, taking them to 52 for no loss in the initial five overs.
Moeen Ali was the first to strike as his off-break delivery clattered Sharma's stumps, leaving Mumbai at 70/1 in the eighth over.
Just three balls later, Ali once again jolted the hosts as he picked de Kock (40 off 26) in front of the wickets.
Ishan Kishan and Suryakumar Yadav then forged a 33-run partnership as they repaired the major damage but Yuzvendra Chahal packed both of them back in short time to leave Mumbai reeling at 129/3 in the 16th over.
It seemed Mumbai would suffer a batting collapse but it was Pandya who made sure to help his team cross the line as the all-rounder and his brother Krunal Pandya (11 off 21) took Mumbai to 148 before the latter became a victim of Mohammed Siraj.
With 22 needed off the last couple of overs, Pandya showed his cameo with the bat as he smashed Pawan Negi for the required runs in just an over to help Mumbai register their fifth win this season.
For Bangalore, Chahal and Ali picked couple of wickets each.
Earlier, AB de Villiers' scintillating knock (75 off 51) with Ali's 50 off 32 propelled Bangalore to 171/7.
Despite some early blows, de Villiers and Ali anchored Bangalore's innings with a valiant 105-run partnership for the third wicket before Lasith Malinga (4/31) rattled the middle order.
The visitors lost their skipper Virat Kohli (8) with just 12 runs on board. Kohli was trying to force a Jason Behrendorff delivery through the off-side, got cramped, and ended up giving an inside edge to de Kock behind the wickets.
Parthiv Patel (28) showed some resistance, taking his side near the 50-run mark before he was sent back by Hardik Pandya in the seventh over. De Villiers was then joined by Ali and the duo denied the hosts any further wicket, anchored the innings and took the team past the 100 run mark.
Enroute, they also notched up their respective half-centuries with the team looking comfortable at 144/2 in 17 overs.
Malinga finally shattered the partnership by packing Ali back in the 18th over. The Sri Lankan pacer went on to rock the lower middle order, sending back Marcus Stoinis (0), Akshdeep Nath (2) and Negi (0) to the hut in quick succession.
De Villers finally departed trying to convert a single as he fell short of the crease. The South African superstar's knock was laced with six boundaries and four maximums.
Behrendorff and Pandya also picked a wicket each.
Mumbai Indians 172/5 in 19 overs (Quinton de Kock 40, Hardik Pandya 37 not out; Moeen Ali 2/18) beat Royal Challengers Bangalore 171/7 in 20 overs (AB de Villiers 75, Moeen Ali 50; Lasith Maling 4/31) by 5 wickets.