With all the votes counted, candidates supported by the ruling United Russia party lost out to the opposition in 20 of the city’s 45 voting districts.
Communist, independent and liberal candidates achieved significant gains against those allied with United Russia, bringing more political diversity to the assembly.
The Communists won 13 seats, up from only five previously.
The liberal Yabloko party won three seats, plus an independent candidate supported by the party won another seat. The left-leaning Just Russia party also won three seats after having none previously.
Pro-Kremlin deputies, both United Russia candidates and independents supported by the party, had held 38 of the assembly’s seats after the previous election in 2014.
No candidates ran under its banner this year as the party is deeply unpopular.
Nine previous deputies of United Russia retained their seats after running as independents, but the party’s leader in Moscow Andrei Metelsky lost a re-election bid.
“We will carry out work on our mistakes,” Metelsky told RIA Novosti news agency.
Another high-profile loser was Valeriya Kasamara, the deputy head of the Higher School of Economics, a leading university. She was seen as a pro-Kremlin candidate and her posters were visible across the city.
One of the university’s students, a Navalny supporter, is currently facing criminal charges for his popular political video blog after he took part in protests.
In addition, 13 candidates won who were nominally independent but were reportedly supported by United Russia.
These included Olympic synchronised swimmer and television sports commentator Maria Kiselyova and Natalya Metlina, a presenter on Zvezda defence ministry television channel.
A further three candidates won who held United Russia seats in the previous parliament but this time represented a pro-Kremlin movement called My Moscow.
After his allies were banned from the vote, main opposition leader Alexei Navalny put forward a “Smart Voting” plan urging Muscovites to support those who had the highest chances of beating pro-Kremlin candidates — many of them Communists.
Twenty of the candidates on Navalny’s “smart voting” list won, which he called a “fantastic result” on Twitter.
There was a slightly higher turnout than for previous polls in 2014 at just over 21 percent.