I want to apply a custom function and create a derived column called population2050 that is based on two columns already present in my data frame.
import pandas
You were almost there:
facts['pop2050'] = facts.apply(lambda row: final_pop(row['population'],row['population_growth']),axis=1)
Using lambda allows you to keep the specific (interesting) parameters listed in your function, rather than bundling them in a 'row'.