A Mexico Civil Protection official said.
The cause of the collision is still unknown, but the video shared on social media and immersed in the globe by CNN shows freight trains plowing up into two-storey buses that were beginning to cross the truck with slower traffic. The roof of the bus was torn apart as it was carried by train on tracks.
The crash occurred on the Atlacomulco city highway, state officials said.
The bus driver has been detained, Adrian Hernandez, general coordinator for civil protection, said on Millenio TV.
The aftermath photos showed the front windshield on the bus roof shattered and almost flat.
Videos circulating online also show people trying to help passengers get sheltered from the roof.
CNN contacted the bus operator for comment.
A spokesman for Kansas City, Canada, told CNN that the train is run by its subsidiary CPKC DE Mexico, adding that the company is working with staff in its response efforts and investigations.
“Our most sincere pathetic dol comes to the families of the victims of this tragedy,” the spokesman said.
The Atlacomulco City Council said the community was in mourning after the conflict. “We are expressing our most sincere solidarity with the families affected at this time,” he said in a statement.
Traffic is closed in both directions so that emergency services can respond.