Simple: Nagios was built with alerting first. Cacti was built with graphing first.
Both have addons that will enable the functionality of the other, but it boils down to what you want. If you already have a monitoring solution, and just want performance graphs Cacti might make sense. If you want a single unified solution with an emphasis on monitoring, Nagios might make sense.
Cacti can alert based on thresholds using the thold plugin, but Nagios can do so much more (passive checks, handle flapping more gracefully, team-based alerts that are "time of day" aware, etc.) Cacti also relies on SNMP or WMI to gather what it needs. Nagios can do SSH, WMI, SNMP, and it also has agents for Windows that can do some pretty powerful stuff compared to Cacti.
Not bashing Cacti (I've deployed it before), but I prefer alerting to be the focus of my unified alerting/graphing solution.