<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_sf_values(self, filename='shlp_hour_factors.csv'):
 """ Determine the h-values Parameters filename : string name of file where sigmoid factors are stored """

        file = os.path.join(self.datapath, filename)
        hour_factors = pd.read_csv(file, index_col=0)
        hour_factors = hour_factors.query(
            'building_class=={0} and shlp_type=="{1}"'.format(
                self.building_class, self.shlp_type))

        # Join the two DataFrames on the columns 'hour' and 'hour_of_the_day'
        # or ['hour' 'weekday'] and ['hour_of_the_day', 'weekday'] if it is
        # not a residential slp.
        residential = self.building_class > 0
        left_cols = ['hour_of_day'] + (['weekday'] if not residential else [])
        right_cols = ['hour'] + (['weekday'] if not residential else [])
        sf_mat = pd.DataFrame.merge(
            hour_factors, self.df, left_on=left_cols, right_on=right_cols,
            how='outer', left_index=True).sort_index()

        # drop unnecessary columns
        drop_cols = (
            ['hour_of_day', 'hour', 'building_class', 'shlp_type',
             'date', 'temperature'] + (['weekday_x'] if residential else []) +
            (['weekday_y'] if residential else []) +
            (['weekday'] if not residential else []))
        sf_mat = sf_mat.drop(drop_cols, 1)

        # Determine the h values
        length = len(self.temperature)
        sf = (np.array(sf_mat)[np.array(list(range(0, length)))[:],
                               (self.get_temperature_interval() - 1)[:]])
        return np.array(list(map(float, sf[:])))