Why did Cell and Frieza keep their bodies after they died? I thought only kind people who have great achievements could keep their body in hell or heaven so that they can continue to improve; Kami said that when Goku died the first time. But why did people like Cell, Frieza, Dr. Gero (and this one can't even fight!) keep their bodies? What's more, Baby didn't show up in hell. Why did all of this happen?

And why did Chi Chi keep her body when she died? She was sent to heaven in a flower ground with some other people when Goku was fighting Majin Buu.
That's an inconsistency introduced by the anime. They introduced them in fillers, to be able to make more chapters from the manga. As with other fillers, that was inconsistent with the more coherent manga.

In the manga, only a few warriors are allowed to have their bodies in the alterlife. Other souls were shown as little clouds. Specifically, evil souls were punished, purified and removed of any memory before reincarnation.