code: def calculate_nf(sample_frame, ref_targets, ref_sample):
      
      grouped = sample_frame.groupby(['Target', 'Sample'])['Cq'].aggregate(average_cq)
      samples = sample_frame['Sample'].unique()
      nfs = gmean([pow(2, -grouped.ix[zip(repeat(ref_gene), samples)] + grouped.ix[ref_gene, ref_sample]) for ref_gene in ref_targets])
      return pd.Series(nfs, index=samples)
docs: Calculates a normalization factor from the geometric mean of the
      expression of all ref_targets, normalized to a reference sample.
  
      :param DataFrame sample_frame: A sample data frame.
      :param iterable ref_targets: A list or Series of target names.
      :param string ref_sample: The name of the sample to normalize against.
      :return: a Series indexed by sample name containing normalization factors
          for each sample.