def METHOD_NAME(self):
    """Merges together any good sections which span multiple segments,
    as long as those segments are adjacent 
    (previous.end - max_sample_period <= next.start <= previous.end).
    Returns
    -------
    sections : TimeFrameGroup (a subclass of Python's list class)
    """
    sections = TimeFrameGroup()
    end_date_of_prev_row = None
    for index, row in self._data.iterrows():
        row_sections = row['sections']
        # Check if first TimeFrame of row_sections needs to be merged with
        # last TimeFrame of previous section
        if (end_date_of_prev_row is not None):
            rows_are_adjacent = (
                (end_date_of_prev_row - self.max_sample_period_td)
                <= index <=
                end_date_of_prev_row)
            if rows_are_adjacent and row_sections[0].start is None:
                assert sections[-1].end is None
                sections[-1].end = row_sections[0].end
                row_sections.pop(0)
            else:
                # row_sections[0] and sections[-1] were not in adjacent chunks
                # so check if they are both open-ended and close them...
                if sections and sections[-1].end is None:
                    try:
                        sections[-1].end = end_date_of_prev_row
                    except ValueError: # end_date_of_prev_row before sections[-1].start
                        pass
                if row_sections and row_sections[0].start is None:
                    try:
                        row_sections[0].start = index
                    except ValueError:
                        pass
        end_date_of_prev_row = row['end']
        sections.extend(row_sections)
    if sections:
        sections[-1].include_end = True
        if sections[-1].end is None:
            sections[-1].end = end_date_of_prev_row
    return sections