Zverev, the fifth seed, held off a stirring comeback from the 38-year-old who produced some sublime tennis to fend off five match points to send the match to a decider.
However, Zverev, ranked sixth in the world but without a top 10 scalp in 2019, rallied behind his backhand in the third set to open up a 4-1 advantage against an increasingly agitated Federer.
How can Norrie qualify for ATP Finals? Who else is in contention?
In fact, such was the Swiss star’s chagrin at his performance and the German's excellence, he was deducted a point in the fourth game of the deciding set and would eventually go down in two hours and six minutes.
Zverev faces Matteo Berrettini for a place in the final after the Italian beat Dominic Thiem 7-6(8) 6-4.
Federer, Murray fall in major ranking shake-up; Norrie, Badosa into top 15
Tsitsipas, Zverev stunned at Indian Wells as draw opens up for Norrie