Analysis of call center employee performance
Yes, functions would be a splendid idea.  However a lot of the
calculations aren't repeated, so it's hard to see which parts could be
factored out usefully.

Apart from that I'd suggest putting the *_target and *_weight
variables into a dictionary or another data frame so that they can be
referred to by name, making it more easy to use them from functions:

parameters = pandas.DataFrame({
    'target': [0.75, 0.75, 0.25, 5.25],
    'weight': [0.30, 0.30, 0.40, 0.00]
}, index = ['csat', 'fcr', 'nps', 'aht']).transpose()


With the data frame above it's easy to select just the parameters for
"csat" for example, using parameters.csat.target or  .weight.

That also makes certain queries more generic:

df['goal_attainment'] = sum(df[name] / parameters[name].target * parameters[name].weight
                            for name in parameters if name not in {"aht"})


A couple of frequently used queries can also be reused,
e.g. df['survey_count'] should likely be cached, similarly for the
comparisons:

survey_count = df['survey_count']
positive_survey_count = df['survey_count'] &gt; 0


(Maybe take a closer look to the Pandas API, e.g. how the data could be
structured with nested names and multi indexes.)